IE扩展名-注入Javascript文件

IE扩展名-注入Javascript文件,javascript,c++,internet-explorer,atl,ieaddon,Javascript,C++,Internet Explorer,Atl,Ieaddon,我正在开发一个IE扩展,它可以在Internet Explorer中打开的站点上工作。它的设计与chrome扩展的工作方式相同。我尝试用C++和内容脚本实现Chrome扩展的后台函数,通过注入JS到当前的网页中。内容脚本,我正在尝试通过IHTMLWindow2 execScript on Document load事件加载。现在我需要直接注入JS文件,我尝试了以下方法 将JS文件放在项目目标内的文件夹下,并尝试使用物理路径进行注入 std::wstring filePath(_T("d:/xx/

我正在开发一个IE扩展,它可以在Internet Explorer中打开的站点上工作。它的设计与chrome扩展的工作方式相同。我尝试用C++和内容脚本实现Chrome扩展的后台函数,通过注入JS到当前的网页中。内容脚本,我正在尝试通过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
我很不确定是否有办法从物理路径向当前DOM注入Javascript。请帮我做这个


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

您不必在DOM中注入标记

如果您的js文件包含:

var strHello = "Hello";
function SayHello() { alert( strHello ); }
您可以将该文件读入内存,用它构造一个BSTR字符串,然后将该字符串传递给IHTMLWindow2::execScript


稍后,用字符串SayHello调用execScript;将弹出警报框。您注入的代码仍然在这里。

我知道的execScript方法是来自IHTMLWindow2接口的COM方法,该方法采用包含一些JavaScript的字符串,而不是JavaScript文件名。mauell,我正在尝试做同样的事情,编写一个包含JavaScript的脚本。”scriptText'将包含javascript内容,例如创建一个head元素和一个script元素,我将在'filePath'中为script元素添加src,并在'endScript'中为后面的脚本添加src。请告诉我您是否成功地解决了我的回答中的问题。但我真正想要的是插入一个文件,而不是使用脚本你想要的是一件事,IE会让你做的是另一件事。如果有一天你找到绕过安全限制的方法,别忘了通知我。无论如何,我不明白你为什么不按照我在回答中所解释的那样自己读取文件并注入它。我的脚本行扩展到100行:我觉得把所有这些脚本行都写在execScript中看起来不太好。因此,我使用一个文件来保存脚本,然后使用标记进行注入。我用了超过1K的线路。总之,在内部,JS文件被读取,其内容以类似的方式被注入。。。试试看,它会解决你的问题。但我真正想要的是插入一个文件,而不是直接使用脚本