阅读第'页;s从chrome扩展中链接的脚本
Read page's linked script from chrome extension
我正在构建一个Chrome扩展,该扩展能够从浏览器操作中检测自定义javascript代码。
到目前为止,我设法检测到自定义代码何时在页面中,但当它从外部.js文件加载时,我无法检测到(这就是这个问题的目的,我想检测<script src="http://www.externaldomain.com/file.js"></script>
的内容
我知道这是可以实现的,因为谷歌在其"标记助手"扩展中做到了这一点,但检查他们的源代码,一切都被缩小了,很难弄清楚他们是如何做到的。例如,标签助理
你知道他们使用了哪种API/技巧吗?
当一个网站加载时,它运行所有的脚本,有点像chrome上的控制台。如果您使用控制台运行alert("hello")
,它将运行一次,并且您将无法使用javascript将其取回。类似地,嵌入的js文件都只运行一次,您不能只查看html或其他任何地方来获取代码,因为js文件在运行后会被卸载。所有函数都存储在变量、与这些函数链接的事件等中。
您可以做的,也可能必须做的是使用ajax重新获取这些文件。
我想这正是标签助理所做的。经过一段时间的寻找,我发现了这个:
//for each document.script, get the src, and load it with ajax using the function gf(src,return function), and send the response.responseText to the text identification functions
cf.prototype.qa = function(a, b) {
var c = {};
Ea(document.scripts, function(d) {//for each
!d.src || "" == d.src || c[d.src] || ef(this, d.src) || d.src == a || (c[d.src] = !0, gf(d.src, function(a) {
cf.M().W.forEach(function(c) {
c.u() && (c = c.qa(a.responseText, d.src), c.length && b(c, d.src))
})
}))
}, this)
};
函数gf是一个简单的ajax调用,带有回调函数
gf = function(a, b) {
try {
var c = new XMLHttpRequest;
c.open("GET", a, !0);
var d = !1;
c.onreadystatechange = function() {
d || 4 != c.readyState || 200 != c.status || (d = !0, b(c))
};
c.send()
} catch (e) {}
}
来源于铬-extension://kejbdjndbnbjgmefkgdddjlbokphdefk/tag_assistant.js(内容脚本)
看到标签助手的作用,我建议您获取每个脚本元素,检索其src,并在内容脚本中运行一个简单的ajax调用,如本页所示:http://code.tutsplus.com/articles/how-to-make-ajax-requests-with-raw-javascript--net-4855
//for each script, get its src,and do whatever you want with it
for(i=0;i<document.scripts.length;i++){
load(document.scripts[i].src, function(xhr){
myCodeAnalyzingFunction(xhr.responseText)
})
}
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 试图阻止Chrome通过扩展关闭
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 从选项页面更新chrome扩展清单权限
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- Chrome扩展:遍历不同的页面并收集数据
- Chrome扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件
- Chrome扩展:Chrome.tabs.executeScript不工作
- 中的访问扩展chrome://extensions页
- 如何在扩展Chrome DevTool时检索请求的启动器
- Chrome扩展-Chrome报警API为创建的每个新报警重新安排所有报警
- 是否有任何方法来扩展chrome's __commandLineAPI
- 谷歌Chrome扩展Chrome .tab . onupdate . addlistener
- 创建在页面上注入脚本的扩展chrome内容
- Chrome扩展:Chrome扩展中未定义的变量,即使它存在于控制台中