Как внедрить Javascript в элемент управления WebBrowser - PullRequest
3 голосов
/ 03 ноября 2011

Здесь есть отличный учебник о формах окон

Как добавить Javascript в элемент управления WebBrowser?

Я попробовал, и это прекрасно работает

Но проблема в том, что используемые там объекты не распознаются приложением wpf. Так что я спрашиваю, что является эквивалентом функции ниже в приложении wpf. Спасибо.

HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
string srJquery = File.ReadAllText("jquery.txt");
element.text = srJquery;
head.AppendChild(scriptEl);  

вышеуказанная функция прекрасно работает в приложении Windows Form C # 4.0, но используемые объекты, такие как HtmlElement, не распознаются в приложении WPF.

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Работает ли это?

    private void WebBrowser_LoadCompleted
       (object sender,
        System.Windows.Navigation.NavigationEventArgs e)
    {
        var webBrowser = sender as WebBrowser;

        var document
           = webBrowser.Document as mshtml.HTMLDocument;
        var ahref
           = document.getElementsByTagName("A").Cast<mshtml.IHTMLElement>().First();
        ahref.setAttribute(
           "onmouseenter",
           "javascript:alert('Hi');", 1);
    }

Требуется ссылка Microsoft.mshtml (.net API, а не MS Office one).

Также см. Этот код для управления веб-браузером WPFкоторый использует ObjectForScripting свойство WebBrowser, которое может помочь вам ввести javascript ...

http://blogs.msdn.com/b/wpf/archive/2011/05/27/how-does-wpf-webbrowser-control-handle-window-external-notify.aspx

Дайте мне знать, если это поможет.

2 голосов
/ 06 августа 2014

Лучший ответ, который я нашел в сети, был от http://clistax.com/question/qt/153748/st/4eb64b29180c4

Я полагаю, что самый простой способ внедрить Javascript в HTML-документ WebBrowser Control из c # - это вызвать метод execStrip с кодомдля вставки в качестве аргумента.

В этом примере код javascript внедряется и выполняется в глобальной области видимости:

var jsCode="alert('hello world from injected code');";
WebBrowser.Document.InvokeScript("execScript", new Object[] { jsCode, "JavaScript" });

Если вы хотите отложить выполнение, внедрить функции и вызывать их после:

var jsCode="function greet(msg){alert(msg);};";
WebBrowser.Document.InvokeScript("execScript", new Object[] { jsCode, "JavaScript" });

WebBrowser.Document.InvokeScript("greet",new object[] {"hello world"});

Это действительно для элементов управления Windows Forms и WPF WebBrowser.

Это решение не является кросс-браузерным, поскольку «execScript» определен только в IE и Chrome.Но вопрос касается элементов управления Microsoft WebBrowser, и поддерживается только IE.

0 голосов
/ 21 марта 2012

Я нашел эту справку, в которой говорится о invokescript eqivilent в wpf для простого выполнения кода скрипта внутри html: http://msdn.microsoft.com/en-us/library/cc452443.aspx

...