【问题标题】:How to inject a Javascript script into webpage using WebBrowser control?如何使用 WebBrowser 控件将 Javascript 脚本注入网页?
【发布时间】:2017-04-12 09:38:21
【问题描述】:

在我的应用程序中,我需要使用 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,不知道我应该投什么。

感谢您的帮助。

【问题讨论】:

  • 它不适用于 WPF 控件,因此它不重复...
  • 您尝试过什么吗?看来您在问题上付出了 0 努力,在使用答案上付出了 0 努力。虽然它需要稍作改动,但这确实适用于 WPF WebBrowser 并且是重复的......
  • 在询问之前,我花了 2 天时间试图解决这个问题。但无法解决问题。所以我在这里问。
  • 那么现在你相信我了吗? ;-) 很高兴你成功了。

标签: c# .net wpf webbrowser-control


【解决方案1】:

添加对mshtml的引用

无论你想注入 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");

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多