如何使用WebBrowser控件将Javascript脚本注入网页?

时间:2017-04-12 09:38:21

标签: c# .net wpf webbrowser-control

在我的应用程序中,我需要使用WebBrowser控件来处理用户登录。我使用WPF和它的WebBrowser控件。问题是我想显示某个div下的网页的一部分。我找到了一个解决方案,我需要将一个javascript脚本注入一个加载的html页面,但我不知道如何做到这一点:(

这是我想要注入网页的脚本。

function showHide() { 
     $('body >').hide(); 
     $('#div').show().prependTo('body'); 
}

所以我以后可以称之为webbrowser1.InvokeScript("showHide");

我在堆栈上阅读了很多帖子,但是所有这些帖子都引用了WindowsForms WebBrowser,并且它不能与WPF一起使用。

编辑:我试过了:

private void PageLoaded (object sender, NavigationEventArgs e)
{
    var webBrowser = sender as WebBrowser;

    webBrowser.Document.InvokeScript("execScript",
            new object[] {"$('body >').hide(); $('#" + _div + "').show().prependTo('body');"});

} 

但是webBrowser.Document是类型对象,我不能在其上调用InvokeScript,也不知道我应该投射它。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

添加对mshtml

的引用

enter image description here

无论如何你想要注入JavaScript:

var doc = (mshtml.HTMLDocument)webBrowser1.Document;
var head = doc.getElementsByTagName("head").Cast<mshtml.HTMLHeadElement>().First();
var script = (mshtml.IHTMLScriptElement)doc.createElement("script");
script.text = "function myFunction() { alert(\"Hello!\");}";
head.appendChild((mshtml.IHTMLDOMNode)script);

无论如何你想从以下方式调用JavaScript:

webBrowser1.InvokeScript("myFunction");

结果:

enter image description here