2013-12-08 70 views
0

我使用下面的代碼加載在的Windows Phone 7.1 WebBrowser控件的網頁:在WebBrowser控件調用任意JavaScript

public MainPage() 
    { 
     InitializeComponent(); 
     this.webBrowser1.IsScriptEnabled = true; 
     this.webBrowser1.Navigate(new Uri("http://xkcd.com/")); 
     this.webBrowser1.MouseMove += new MouseEventHandler(mouseMove); 
    } 

    void mouseMove(object sender, MouseEventArgs e) 
    { 
     var a = this.webBrowser1.InvokeScript(
      "eval", 
      new[] { "document.body.removeChild(document.getElementById('topContainer')); " }); 
    } 

它拋出以下異常:An unknown error has occurred. Error: 80020101.代碼document.body.removeChild(document.getElementById('topContainer'));作品鉻控制檯,但在這裏拋出異常。爲什麼?請注意,JavaScript DOES得到執行,只會引發異常。

+0

80020101指向一個錯誤,而評估的JavaScript。嘗試在你的'alert()'中加入一些文本作爲開始...另外,爲什麼要調用eval? –

+0

我正在使用eval,因爲我需要評估一個腳本,而不僅僅是一個函數調用。這是我意識到使用WebBrowser控件在外部網頁上調用任意javascript的唯一方式。 –

回答

2

我設法通過將InvokeScript置於WebBrowser的Loaded事件而不是MouseMove來使您的代碼正常工作。

我猜MouseMove事件觸發得太快,導致與WebBrowser控件同步問題。

這裏是工作的代碼:

public MainPage() 
{ 
    InitializeComponent(); 

    this.webBrowser1.IsScriptEnabled = true; 
    this.webBrowser1.Navigate(new Uri("http://xkcd.com/")); 
    this.webBrowser1.LoadCompleted += webBrowser1_LoadCompleted; 
} 

void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{ 
    var a = this.webBrowser1.InvokeScript(
     "eval", 
      new[] { "document.body.removeChild(document.getElementById('topContainer')); " }); 
}