1

我正在开发一个适用于在 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 中。

4

1 回答 1

0

您不必SCRIPT在 DOM 中注入 < > 标签。

如果你的 js 文件包含:

var strHello = "Hello";
function SayHello() { alert( strHello ); }

您可能只是将文件读入内存,BSTR用它构造一个字符串,然后将该字符串传递给IHTMLWindow2::execScript.

稍后,使用该字符串再次调用 execScriptSayHello();将弹出警告框。你注入的代码还在。

于 2014-03-07T11:37:43.877 回答