从Chrome扩展中阅读页面的链接脚本
我正在构建Chrome扩展,能够从浏览器操作中检测自定义JavaScript代码。从Chrome扩展中阅读页面的链接脚本
到目前为止,我设法检测到自定义代码在页面本身的时间,但是当它从外部.js文件加载时我无法检测到它(这就是这个问题的目的,我想检测的<script src="http://www.externaldomain.com/file.js"></script>
我知道,因为谷歌在其“标签助理”扩展名,但检查他们的源代码做了这个可以实现的内容,一切的微细化以及很难弄清楚他们是如何做到的。 eg. Tag Assistant
你知道他们使用哪种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) {}
}
源从chrome-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)
})
}
这正是我遇到的情况,但是查看他们的代码,看起来他们能够检索每个外部标签。但是当我尝试时,我总是会弹出一个CORS错误。然而,在他们的代码中,似乎他们能够提出请求而没有任何问题。你知道他们的代码做了什么吗? – 2015-04-01 15:00:21
它可能与其权限之一有关,如果不起作用,那么您的background.js和弹出页面都可以访问跨网页,而不会出现任何问题。 – 2015-04-01 15:09:25
您需要主机权限。在文档中查看 - “”
不能近距离投票,但我会说目前还不清楚你在问什么。 “自定义JavaScript”是什么意思? – Xan 2015-03-31 15:34:24
比方说,我想找到一个特定的表达式,如“var myVariable =” – 2015-03-31 15:45:55
查找?找到哪里?例如,您可以添加'