从Chrome扩展中阅读页面的链接脚本

问题描述:

我正在构建Chrome扩展,能够从浏览器操作中检测自定义JavaScript代码。从Chrome扩展中阅读页面的链接脚本

到目前为止,我设法检测到自定义代码在页面本身的时间,但是当它从外部.js文件加载时我无法检测到它(这就是这个问题的目的,我想检测的<script src="http://www.externaldomain.com/file.js"></script>

我知道,因为谷歌在其“标签助理”扩展名,但检查他们的源代码做了这个可以实现的内容,一切的微细化以及很难弄清楚他们是如何做到的。 eg. Tag Assistant

你知道他们使用哪种API /技巧吗?

+0

不能近距离投票,但我会说目前还不清楚你在问什么。 “自定义JavaScript”是什么意思? – Xan 2015-03-31 15:34:24

+0

比方说,我想找到一个特定的表达式,如“var myVariable =” – 2015-03-31 15:45:55

+0

查找?找到哪里?例如,您可以添加'

当一个网站加载时,它会在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) 
    }) 
} 
+0

这正是我遇到的情况,但是查看他们的代码,看起来他们能够检索每个外部标签。但是当我尝试时,我总是会弹出一个CORS错误。然而,在他们的代码中,似乎他们能够提出请求而没有任何问题。你知道他们的代码做了什么吗? – 2015-04-01 15:00:21

+0

它可能与其权限之一有关,如果不起作用,那么您的background.js和弹出页面都可以访问跨网页,而不会出现任何问题。 – 2015-04-01 15:09:25

+1

您需要主机权限。在文档中查看 - “”“'将适合你的目的。就像我在对这个问题的评论中所说的 - 如果一个脚本被添加为标签然后被移除,您将无法恢复它。 – Xan 2015-04-01 15:15:08