【问题标题】:Invoking arbitrary javascript in a WebBrowser control在 WebBrowser 控件中调用任意 javascript
【发布时间】:2013-12-25 08:06:31
【问题描述】:

我正在使用以下代码在 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 确实会执行,只是抛出异常。

【问题讨论】:

  • 80020101 在评估 javaScript 时指出错误。尝试在您的 alert() 中添加一些文本作为开始...另外,为什么要调用 eval?
  • 我使用 eval 是因为我需要评估一个脚本,而不仅仅是一个函数调用。这是我知道使用 WebBrowser 控件在外部网页上调用任意 javascript 的唯一方法。

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


【解决方案1】:

我设法通过将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')); " });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 2011-07-31
    • 2015-01-30
    • 2016-04-15
    • 2023-03-31
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多