【发布时间】:2014-04-05 22:25:58
【问题描述】:
我正在开发一个适用于在 Internet Explorer 中打开的网站的 IE 扩展程序。它的设计方式与 chrome 扩展程序相同。我正在尝试使用 c++ 和内容脚本通过将 JS 注入当前网页来实现 chrome 扩展的背景功能。内容脚本,我试图通过 IHTMLWindow2 execScript on Document load 事件加载。现在我需要直接注入 JS 文件,我尝试了以下方法。
在项目目标内的文件夹下有 JS 文件,并尝试使用物理路径注入。
std::wstring filePath(_T("d:/xx/xxx/x/x/Content/myFile.js"));
scriptText = scriptText+ filePath + endScript;
VARIANT vrt = {0};
HRESULT hrexec = ifWnd->execScript(SysAllocString(scriptText.c_str()),L"javascript", &vrt);
scriptText 有一些 javascript 代码来创建具有 type 和 src 属性的脚本元素。 filePath 包含指向 js 文件的物理路径。[也尝试了相对路径,但没有成功]
由于混合内容问题,上述在 IE9 中无法正常工作,据我研究发现 IE9 期望从服务器而不是本地物理路径检索 js 文件。控制台向我抛出以下异常。
SEC7111: HTTPS security is compromised by file:<filepath>
SCRIPT16388: Operation aborted
我几乎不确定是否有任何关于从物理路径将 Javascript 注入当前 DOM 的方法。请帮助我。
另外让我知道是否有任何其他可能将 JS 文件从当前工作目录注入到 DOM 中。
【问题讨论】:
-
execScript方法我知道,是来自IHTMLWindow2接口的 COM 方法,该方法采用包含一些 JavaScript 的字符串,而不是 JavaScript 文件名。 -
mauell,我正在尝试做同样的事情,编写一个包含 javascript 的脚本。 'scriptText' 将包含 javascript 内容,例如创建一个 head 元素和创建一个 script 元素,并且我将在 'filePath' 中附加 script 元素的 src 和在 'endScript' 中的后续脚本。
-
如果你用我的回答解决了你的问题,请告诉我。
-
但我真正想要的是插入文件而不是直接使用脚本
-
你想要的是一回事,IE 让你做的又是另一回事。如果有一天您找到绕过安全限制的方法,请不要忘记通知我。无论如何,我不明白您为什么不按照我在回答中的解释自己阅读文件并注入它。
标签: javascript c++ internet-explorer atl ieaddon