这似乎是一个奇怪的问题,但是有没有一种方法可以在不让浏览器控件导航到它的情况下覆盖 window.location?我遇到的问题是我在控件中注入(inject) html 代码,并且 window.location 是关于:空白 - 导致某些 javascript 代码出错。试图让他们认为他们在 about:blank 以外的 URL 中
最佳答案
当 document.documentMode >= 9
(IE9+) 时,我使用 Object.defineProperty() 取得了成功。
为了在 IE9+ 模式下获取 WebBrowser 控件,我首先加载以下 URL:
about:<!doctype html><meta http-equiv="X-UA-Compatible" content="IE=edge">
这在最新文档模式下给出了一个大部分为空的文档。
然后重新定义 window.location
,我通过 eval() 或 document.write() 执行一些脚本:
Object.defineProperty(window, 'location', {value: {href: 'fubar'}});
完整的顺序是这样的:
- 加载控件。
- 等待
WebBrowser.ReadyState == 4
或DocumentComplete
事件。 - 调用
document.open()
(重要)。 - 评估或编写重新定义位置的脚本。
- 编写 HTML 内容。
- 调用
document.close()
(确保调用 onload)。
注意:我使用 ActiveX WebBrowser控件,而不是作为该控件包装器的 .NET 组件。它可能在 .NET 中同样有效。
关于javascript - 覆盖 Webbrowser 控件上的 window.location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138582/