WPF应用程序我有一个WPF用户控件承载使用WebBrowser控件的ASP.Net MVC应用程序。触发事件,以接待来自WebBrowser控件
我想,当对WebApplication的执行一定的动作来通知用户控件。 有什么可能的方法来实现这个目标?
WPF应用程序我有一个WPF用户控件承载使用WebBrowser控件的ASP.Net MVC应用程序。触发事件,以接待来自WebBrowser控件
我想,当对WebApplication的执行一定的动作来通知用户控件。 有什么可能的方法来实现这个目标?
由于@SzabolcsDézsi在评论中提到,如果你有访问Web应用程序可以使用WebBrowser.ObjectForScripting
,以实例的对象,并从JavaScript调用它的方法。下面是一个简单的演示:
[ComVisible(true)] // Class must be ComVisible
public class Demo
{
public void SayHello(string name) => MessageBox.Show($"Hello {name} !!!");
}
创建这个类的一个实例,一个将其分配到WebBrowser控件的ObjectForScripting
属性:
webBrowser.ObjectForScripting = new Demo();
,说我们在WebBrowser
控制显示这个简单的html页面:
<html>
<head>
<title></title>
<script>
function sayhello()
{
var name = document.getElementById('name').value;
// the window.external is assigned an instance of
// class we created above.
// We can call C# instance method SayHello directly.
window.external.SayHello(name);
}
</script>
</head>
<body>
<form action="#" method="post">
<input id="name" type="text" name="name" value="" />
<input type="submit" name="submit" value="Say Hello" onclick="sayhello()" />
</form>
</body>
</html>
现在,只要填写名称并单击SayHello按钮,它就会按预期显示MessageBox。
此外你的财产WebBrowser.Document
这是生活在Microsoft HTML对象库(MSHTML)COM库的HtmlDocument
一个实例,确保引用在您的项目。
文档属性,可以查询当前页面的DOM对象,并通过它,你可以通过由HtmlDocument
类像HtmlDocument.getElementById()
和许多其他暴露的方法处理JavaScript的HTML页面等。
webBrowser.LoadCompleted += new LoadCompletedEventHandler((o, e) =>
{
if (webBrowser.Document is HTMLDocument DOM)
{
var namefield = DOM.getElementById("name");
namefield.setAttribute("value", "Enter your name!!!");
}
});
希望这有助于你理解WebBrowser
控制提供了操纵加载页面的力量:
例如该代码从上面页面后html页面修改名称输入的值属性由WebBrowser控件加载。
这是一个非常好的解释。试了一样,像魅力一样工作!谢谢! – user2143645
您可以修改ASP.NET应用程序?如果是的话,那么你就可以在浏览器控件的'ObjectForScripting'属性设置为可以通过从JavaScript的网站通过'window.external'调用的类的实例。 –