在WebBrowser控件中调用任意javascript

时间:2013-12-08 04:24:01

标签: c# javascript windows-phone-7 webbrowser-control

我使用以下代码在Windows Phone 7.1中的WebBrowser控件中加载网页:

    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'));在chrome控制台中运行,但在此处引发异常。为什么?请注意,javascript会被执行,只会引发异常。

1 个答案:

答案 0 :(得分:2)

我设法通过将InvokeScript放在WebBrowser而不是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')); " });
}