WP7 InvokeScript错误

时间:2012-03-28 16:38:07

标签: c# javascript windows-phone-7

我在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())提交信息时,会抛出一条消息:

  

发生了未知错误。错误:80020101。

问题可能是什么?

2 个答案:

答案 0 :(得分:3)

首先确保IsScriptingEnabled为true,但我认为你做到了。

您的问题可能是您过早调用代码。当Navigated事件发生时,似乎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
    }
}

答案 1 :(得分:0)

脚本可以直接提交表单 - 我有一个依赖于该行为的应用程序。 :)

问题在于,当页面上没有脚本时(在某些情况下,当只有一个小脚本时 - 我无法隔离它),浏览器不会加载(或者可能加载和卸载)脚本引擎。当发生这种情况时,你根本无法执行任何脚本。

在特定情况下对我有用的一件事是制作HTML的本地副本,向其添加随机脚本,并在浏览器中将其作为字符串加载,但这显然不适用于所有内容。

在另一种情况下,另一种替代方案(虽然更多工作)是使用HtmlAgilityPack来阅读HTML并自己发布。