我遇到了与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";
}
}
答案 0 :(得分:0)
该错误转换为0x80020101
,后者又转换为SCRIPT_E_REPORTED
(here's a how-to do this yourself)。微软有confirmed bug他们说经常出现在多核或多处理器计算机上,但也可能出现在单处理器计算机上。 Microsoft解释说它与调用COM接口有关。
这支持your referred to thread中的故事,用户最终跟随Hans Passant的回答,但收到此错误。通过更改P / Invoke声明,他设法解决问题(答案写在问题本身)。
然而another source suggests这可能也意味着脚本本身的错误。如果是这种情况,您应该能够通过处理onScriptError
来捕获脚本错误。
我的建议:
onScriptError
event
,window.event
应该被使用,或者是常见的事件访问技术,如Quirksmode article。中所述