【问题标题】:How to handle onbeforeunload event using winform webbrowser如何使用 winform webbrowser 处理 onbeforeunload 事件
【发布时间】:2012-01-17 14:50:27
【问题描述】:

我在 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";
    }
}

【问题讨论】:

  • 有点OT,但是IE6,真的吗?它已有 10 多年的历史,甚至 Microsoft 也不想再支持它了,请参阅 ie6countdown.com。只是猜测,但您是否会在使用其他版本的浏览器时收到相同的错误?
  • 我知道我会收到关于 IE6 的评论。不幸的是,IE6,这就是我目前生活的世界,并且必须继续生活到今年第二季度或第三季度。

标签: c# winforms browser onbeforeunload


【解决方案1】:

错误转换为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 创建一个处理程序

编辑:OP 尝试了一些建议,发现这首先是一个 JavaScript 错误(我的第二个建议):应该使用 event 而不是 window.event,或者是一种常见的事件访问技术在此Quirksmode article 中进行了描述。

【讨论】:

  • 我确实已经有了替代方法。我相信问题可能出在javascript中。但是,当我将 javascript 更改为不再出现错误的位置时,Invoke 的 result 参数总是返回为 null,因此会出现一个没有文本的消息框。
  • 好的,我找到了一些有效的 javascript。谢谢你帮助亚伯。
  • @Edward 这可能意味着您之前使用的 JS 包含错误。例如,在上面的示例中 cObject 不存在或其他东西。
  • 该错误实际上是由'event'对象不知道引起的,所以是null。有没有办法让上面链接的解决方案中知道“事件”。
  • @EdwardHeyne:所以这确实是一个 JavaScript 错误。你应该改用window.event,它只适用于IE。如果您的脚本也应该在其他浏览器上运行,请使用以下技术:quirksmode.org/js/events_access.html
猜你喜欢
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2014-11-11
相关资源
最近更新 更多