IE扩展 - 注入Javascript文件

时间:2014-03-04 11:46:15

标签: javascript c++ internet-explorer atl ieaddon

我正在开发一个IE扩展,适用于在Internet Explorer中打开的网站。它的设计与chrome扩展的工作方式相同。我正在尝试使用c ++实现chrome扩展的Background功能,并通过将JS注入当前网页来实现内容脚本。内容脚本,我试图通过IHTMLWindow2 execScript加载Document load事件。现在我需要直接注入JS文件,我尝试了以下内容。

将JS文件放在Project目标内的文件夹下,并尝试使用物理路径进行注入。

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属性的script元素。 filePath保存了朝向js文件的物理路径。[也尝试了相对路径,但它是不行的]

由于混合内容问题,上述在IE9中无法正常工作,我研究了IE9是否期望从服务器而不是本地物理路径检索js文件。控制台抛出了以下异常。

SEC7111: HTTPS security is compromised by file:<filepath>
SCRIPT16388: Operation aborted

我几乎不确定是否有任何关于从物理路径向当前DOM注入Javascript的问题。请帮帮我。

另请告诉我是否有其他可能性将JS文件从当前工作目录注入DOM。

1 个答案:

答案 0 :(得分:0)

您不必注入&lt; SCRIPT&gt; DOM中的标记。

如果您的js文件包含:

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

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

稍后,使用字符串SayHello();再次调用execScript将弹出警告框。您注入的代码仍在此处。