2012-03-28 76 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