如何使用winform webbrowser处理onbeforeunload事件

时间:2012-01-17 14:50:28

标签: c# winforms browser onbeforeunload

我遇到了与WinForms WebBrowser控件和onbeforeunload javascript事件处理完全相同的问题(How to intercept the onbeforeunload event in a WebBrowser control?)。我尝试使用相同的解决方案将onbeforeunload事件转换为IDispatch并调用Invoke方法。这样做时我收到此错误:

  

hr = -2147352319

我正在使用IE 6.0在WinXP上使用.NET 3.5进行开发。

我没有在这里放置C#代码,因为它与上面的链接文章完全相同。

JavaScript代码是:

function onBeforeUnload()
{
    if (window.cObject.isTransferred)
    {
        event.returnValue = "\nYou are requesting to exit.\n";                   
    }
    else
    {
        event.returnValue = "\nYou are DELETING this object!!!\n";
    }
}

1 个答案:

答案 0 :(得分:0)

该错误转换为0x80020101,后者又转换为SCRIPT_E_REPORTEDhere's a how-to do this yourself)。微软有confirmed bug他们说经常出现在多核或多处理器计算机上,但也可能出现在单处理器计算机上。 Microsoft解释说它与调用COM接口有关。

这支持your referred to thread中的故事,用户最终跟随Hans Passant的回答,但收到此错误。通过更改P / Invoke声明,他设法解决问题(答案写在问题本身)。

然而another source suggests这可能也意味着脚本本身的错误。如果是这种情况,您应该能够通过处理onScriptError来捕获脚本错误。

我的建议:

  • 在推荐的帖子中尝试建议的替代方法(如果你还没有尝试过)
  • onScriptError
  • 创建处理程序

编辑:OP已经尝试了一些建议并发现这首先是JavaScript错误(我的第二个建议):而不是eventwindow.event应该被使用,或者是常见的事件访问技术,如Quirksmode article

中所述