在WPF应用程序中将jQuery注入WebBrowser控件

时间:2017-04-14 00:05:05

标签: javascript c# jquery wpf webbrowser-control

我有点简单的问题。任务是在WPF应用程序中仅显示WebBrowser控件中加载的网页的一部分。我在堆栈上查找了问题,但解决方案都没有帮助我,也没有解决问题。所以我学到的是,最简单的解决方法是将javascript / jquery函数注入到加载页面的头部,然后使用WebBrowser.InvokeScript调用它来进行DOM操作,但每当我调用我的函数时,我得到脚本错误。

以下是我尝试过的功能,但没有一个功能(我对jQuery或javascript一无所知,所以我不知道如何处理这个问题):

我在堆栈上找到的这个(第二个回答here

function _changeDivs() {
    $('body >').hide(); 
    $('#dex1').show().prependTo('body');
}

我在prependprependTo上阅读了jQuery文档,并从我学到的内容中读到了:(这里我只是试图让脚本不会抛出错误)

function _changeDivs() {
    $('body').prepend($('#dex1')); 
}

简单alert无问题。这是我用来注入脚本的代码:

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

        var doc = (mshtml.HTMLDocument)webBrowser.Document;
        var head = doc.getElementsByTagName("head").Cast<mshtml.HTMLHeadElement>().First();
        var script = (mshtml.IHTMLScriptElement)doc.createElement("script");

        script.text = "function _changeDivs() { $('body >').hide(); $('#dex1').show().prependTo('body'); }";
        head.appendChild((mshtml.IHTMLDOMNode)script);

        webBrowser.InvokeScript("_changeDivs");
 }

如果您想知道何时调用PageLoaded:

webBrowser.LoadCompleted += PageLoaded;

0 个答案:

没有答案