2012-03-28 73 views
2

我有方法InvokeScript一些困難的WP7:WP7 InvokeScript錯誤

webBrowser1.InvokeScript("eval", string.Format("document.getElementsByName('email').value='{0}'", _email)); 
webBrowser1.InvokeScript("eval", string.Format("document.getElementsByName('pass').value='{0}'", _pass)); 
webBrowser1.InvokeScript("eval", "document.forms[0].submit();"); 

不幸的是,當我試圖提交信息,使用(document.forms[0].submit()),拋出一個異常與消息:

An unknown error has occurred. Error: 80020101.

問題可能是什麼?

+0

不確定,但可能是安全相關問題,不允許腳本直接提交表單! – 2012-03-28 16:41:56

回答

3

首先確保IsScriptingEnabled爲true,但我認爲你做到了。

您的問題可能是您過早調用該代碼。看起來,導航事件發生時DOM尚未準備好進行操作。例如:

public partial class MainPage : PhoneApplicationPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     Wb.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(Wb_Navigated); 
     MouseLeftButtonDown += new MouseButtonEventHandler(MainPage_MouseLeftButtonDown); 

     Wb.NavigateToString("<html><body><form action='http://google.com/'></form></body></html>"); 
    } 

    void Wb_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     Wb.InvokeScript("eval", "document.forms[0].submit();"); // Throws 80020101 
    } 

    private void MainPage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     Wb.InvokeScript("eval", "document.forms[0].submit();"); // Works 
    } 
} 
+0

哦謝謝,這告訴我正確的解決方案:) – 2012-03-31 17:42:16

+0

雖然看到這個問題的解決方案會很高興。儘管如此,仍然非常有幫助。 – Christian 2013-10-08 21:39:28

0

腳本可以直接提交表單 - 我有一個取決於該行爲的應用程序。 :)

問題是,當頁面上沒有腳本(並且在某些情況下,當只有一個小腳本 - 我沒有能夠隔離這個)時,瀏覽器不會加載(或者加載和卸載)腳本引擎。發生這種情況時,您無法執行任何腳本。

在特定情況下,對我而言,一件事情是製作HTML的本地副本,向其中添加隨機腳本,然後在瀏覽器中將其作爲字符串加載,但這顯然不適用於所有內容。

對於另一種情況,另一種替代方案(儘管更多的工作)是使用HtmlAgilityPack來閱讀HTML並自己做文章。

+0

thx爲您的答案 - 我已經明白,沒有找到所需的腳本。但它讓我感到吃驚,我認爲在調用方法的語法上存在問題,但我在js中並不擅長。 我嘗試一下HtmlAgilityPack。 – 2012-03-29 07:14:03

+0

你的腳本調用似乎很好。另外,請看看另一個答案 - 看起來@Kylerr實際上發現了一個時間問題。可以解決你的問題。 – 2012-03-29 07:19:04