我正在开发一个 IE 扩展,它适用于在 Internet Explorer 中打开的站点。它旨在以与 chrome 扩展相同的方式工作。我正在尝试通过将 JS 注入(inject)当前网页来使用 C++ 和内容脚本来实现 chrome 扩展的后台功能。内容脚本,我试图通过 IHTMLWindow2 execScript 加载文档加载事件。现在我需要直接注入(inject) JS 文件,我尝试了以下方法。
将 JS 文件放在项目目的地的文件夹下,并尝试使用物理路径注入(inject)。
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 注入(inject)当前 DOM。请帮我解决这个问题。
另外让我知道是否有任何其他可能将 JS 文件从当前工作目录注入(inject) DOM。
最佳答案
您不必在 DOM 中注入(inject) <SCRIPT
> 标签。
如果你的js文件包含:
var strHello = "Hello";
function SayHello() { alert( strHello ); }
您可以将文件读入内存,用它构造一个 BSTR
字符串,然后将该字符串传递给 IHTMLWindow2::execScript
。
稍后,使用字符串 SayHello();
调用 execScript 将弹出警告框。您注入(inject)的代码仍在此处。
关于javascript - IE 扩展 - 注入(inject) Javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22171049/