2011-11-03 54 views
2

這裏有一個偉大的教程有關Windows窗體如何注入Javascript腳本中WebBrowser控件

How to inject Javascript in WebBrowser control?

我嘗試過了,它的偉大工程

但問題是那裏使用無法識別的對象在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); 

上述函數是在視窗形式應用正常使用C#4.0,但使用的對象,例如的HtmlElement不是在WPF應用程序識別。

+0

HtmlElement生活在SYstem.Windows.Browser和System.Windows.Forms –

+0

我很漂亮這個函數也可以爲WPF應用程序編寫 – MonsterMMORPG

+0

這段代碼使用了HtmlElement和HtmlDocument的Winforms中可用的漂亮包裝類。 WPF沒有他們。使用Winforms瀏覽器是一個明顯的解決方法。 –

回答

4

這是行不通的?

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,而不是辦公軟件之一)參考。

也請參閱使用的WebBrowserObjectForScripting屬性,它可以幫助你在注入的JavaScript WPF WebBrowser控件的代碼...

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

讓我知道,如果這有助於。

+0

我需要注入JavaScript沒有設置元素的屬性。 – MonsterMMORPG

+0

您是否按照我的指示瀏覽了「WebBrowser.ObjectForScripting'的範圍。 –

2

最佳答案我在網上發現從http://clistax.com/question/qt/153748/st/4eb64b29180c4

我相信最簡單的方法來注入Javascript在WebBrowser控制HTML文檔從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窗體和WPF WebBrowser控件。

此解決方案不跨瀏覽器,因爲「execScript」僅在IE和Chrome中定義。但問題是關於微軟WebBrowser控件和IE是唯一支持的。

相關問題