我正在开发一个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。
答案 0 :(得分:0)
您不必注入&lt; SCRIPT
&gt; DOM中的标记。
如果您的js文件包含:
var strHello = "Hello";
function SayHello() { alert( strHello ); }
您可以将文件读入内存,用它构造一个BSTR
字符串,然后将该字符串传递给IHTMLWindow2::execScript
。
稍后,使用字符串SayHello();
再次调用execScript将弹出警告框。您注入的代码仍在此处。