IE 扩展 - 注入 Javascript 文件
Posted
技术标签:
【中文标题】IE 扩展 - 注入 Javascript 文件【英文标题】:IE extension - Injecting Javascript file 【发布时间】:2014-04-05 22:25:58 【问题描述】:我正在开发一个适用于在 Internet Explorer 中打开的网站的 IE 扩展程序。它的设计方式与 chrome 扩展程序相同。我正在尝试使用 c++ 和内容脚本通过将 JS 注入当前网页来实现 chrome 扩展的背景功能。内容脚本,我试图通过 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
我几乎不确定是否有任何关于从物理路径将 Javascript 注入当前 DOM 的方法。请帮助我。
另外让我知道是否有任何其他可能将 JS 文件从当前工作目录注入到 DOM 中。
【问题讨论】:
execScript
方法我知道,是来自IHTMLWindow2
接口的 COM 方法,该方法采用包含一些 JavaScript 的字符串,而不是 JavaScript 文件名。
mauell,我正在尝试做同样的事情,编写一个包含 javascript 的脚本。 'scriptText' 将包含 javascript 内容,例如创建一个 head 元素和创建一个 script 元素,并且我将在 'filePath' 中附加 script 元素的 src 和在 'endScript' 中的后续脚本。
如果你用我的回答解决了你的问题,请告诉我。
但我真正想要的是插入文件而不是直接使用脚本
你想要的是一回事,IE 让你做的又是另一回事。如果有一天您找到绕过安全限制的方法,请不要忘记通知我。无论如何,我不明白您为什么不按照我在回答中的解释自己阅读文件并注入它。
【参考方案1】:
您不必在 DOM 中注入 SCRIPT> 标记。
如果你的js文件包含:
var strHello = "Hello";
function SayHello() alert( strHello );
您可以将文件读入内存,用它构造一个BSTR
字符串,然后将该字符串传递给IHTMLWindow2::execScript
。
稍后,使用字符串SayHello();
再次调用 execScript 将弹出警告框。你注入的代码还在。
【讨论】:
我的脚本行扩展到 100 行 :) 我觉得在 execScript 中编写所有这些脚本行看起来不太好。所以我使用一个文件来保存脚本,然后使用 将包含数百行代码的execScript
传递给BSTR
没有问题。我用超过 1K 行来做。无论如何,在内部,JS文件被读取并且它们的内容最终以类似的方式注入......试试吧,它会解决你的问题。
但我真正想要的是插入文件而不是直接使用脚本以上是关于IE 扩展 - 注入 Javascript 文件的主要内容,如果未能解决你的问题,请参考以下文章
javascript 当您单击浏览器操作图标时,只需极少的Chrome扩展即可将JS文件注入给定页面。然后脚本插入一个n
javascript 当您单击浏览器操作图标时,只需极少的Chrome扩展即可将JS文件注入给定页面。然后脚本插入一个n
使用 JavaScript 将 Chrome 扩展注入 iFrame