javascript - IE 扩展 - 注入(inject) Javascript 文件

标签 javascript c++ internet-explorer atl ieaddon

我正在开发一个 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/

相关文章:

javascript - 在 Javascript 中对整数数组执行计算

javascript - HTML5 离线存储/Web SQL

css - 在没有 js 的 IE 中设置 HTML5 样式

internet-explorer - 需要一个好的 Internet Explorer 6、7、8 独立版

javascript - Node.js 中的 Google datastore.lookup 没有返回结果

javascript - 如何保持谷歌图表列和强制滚动条的大小?

c++ - 构造对象的歧义

c++ - 如何防止 calloc 失败导致程序崩溃?

c++ - 从多个线程多次调用 std::future 上的 wait() 是否安全?

javascript - IE 中 iframe 元素的线程