javascript - 覆盖 Webbrowser 控件上的 window.location

标签 javascript webbrowser-control iwebbrowser2

这似乎是一个奇怪的问题,但是有没有一种方法可以在不让浏览器控件导航到它的情况下覆盖 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 == 4DocumentComplete 事件。
  • 调用document.open()(重要)。
  • 评估或编写重新定义位置的脚本。
  • 编写 HTML 内容。
  • 调用 document.close()(确保调用 onload)。

注意:我使用 ActiveX WebBrowser控件,而不是作为该控件包装器的 .NET 组件。它可能在 .NET 中同样有效。

关于javascript - 覆盖 Webbrowser 控件上的 window.location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138582/

相关文章:

c++ - 在 BeforeNavigate2 事件中枚举表单

javascript - window.open(URL,name,specs,replace) ??名称与替换

C# WebBrowser 平移模式

javascript - 从 C++ 函数返回字符串到 JavaScript

c++ - 为什么对我的 IDispatch 对象的所有引用都没有释放?

css - 如何使HTML中的所有文本内容为纯黑色?

c# - JavaScript 函数在 C# 中返回 bool 值

javascript - 将多个动态键名附加到 javascript 对象的简写方法

javascript - 使用键映射和过滤对象数组

c# - 如何防止 WebBrowser 控件捕获异常并将它们显示为脚本错误?