我主持一个网页浏览器的控制,这通常载一个外部文件,然后使得一些改进使用HTML DOM。

我们还嵌入定制应用程序的链接,使用一个假的协议,例如"关闭",抓获和处理 BeforeNavigate2.

当链接tarket是拼写错误的(说,"spp:CloseWindow"),BeforeNavigate不会触发的自定义的处理。浏览器的控制并不表示navigaiton错误,但仍在READYSTATE_INTERACTIVE和没火 NavigateCompleteDocumentComplete.


我的问题:大多数的操作(例如检索或更新的内容的)被延迟,等待readystate到达 READYSTATE_COMPLETE.在这样一个无效的点击链接,浏览器没有得到更新了的-一个国家我想要避免的。我怎么可以那样做?

  • 可我在检测"DownloadComplete",航行失败?(所以我可以放松的测试 "READYSTATE_COMPLETEREADYSTATE_INTERACTIVE and last downloadComplete was broken")
  • 我能"重启"浏览器控制READYSTATE_COMPLETE(大概不会)
  • 我可以检测pseudoprotocols实际上支持通过浏览器?

(在事后看来,使用一个 xxxx: 前缀不是这样的一个很好的想法,但改变,现在是一点的一个问题。)

有帮助吗?

解决方案

互联网浏览器和窗户有一个可扩展的列表可用协议的实施UrlMon.dll我相信。在这里看到一点关于 即建筑.

因为你无法检测的糟糕的协议在BeforeNavigate是,该协议是未知的,所以没有真正的导航是在发生的事情。浏览器的决定显示一个错误页,而不是。错误页导航不明显提高所有正常的事件。

然而,有一种方法可以检测导航已经在杂草。如果你挂钩的网络浏览器的DocumentCompleted事件,你可以扫描特别网址的关联有错误,或者更一般地说,任何一个网址,开始res://ieframe.dll.

实例:

  • res://ieframe.dll/unknownprotocol.htm#spp:CloseWindow
  • res://ieframe.dll/dnserrordiagoff_webOC.htm#http://192...

一个更清洁的方式是钩到NavigateError的 DWebBrowserEvents2口.

其他提示

我们有一个问题时,举办一个网络浏览器控制(谷歌地图)在,我们将通知航完成(NavigateComplete),但是该网页面本身没有完成的渲染。要解决这个问题,我们增加一个 notifyInitialised javascript功能,只是导航的应用程序://onInitialised'-一个类似的机制,该机制使用。

也许你可以让这样的事情(如果你拥有控制权的网页向其用户浏览)。你可以加入这个通知机制,并检查它在你的代码。如果这不是收到后一规定的超时你可以假定有些东西错了,显示有关信息。

如果你有兴趣,我们还使用一种机制,用于直接叫javascript职能从我们C++代码说明 在这里,在这里,.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top