javascript - 从 chrome 扩展读取页面的链接脚本

标签 javascript google-chrome-extension

我正在构建一个 Chrome 扩展程序,能够从浏览器操作中检测自定义 JavaScript 代码。

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

我知道这是可以实现的,因为谷歌在其“Tag Assistant”扩展中做到了这一点,但检查他们的源代码,一切都被缩小了,很难弄清楚他们是如何做到的。 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)
    })
}

关于javascript - 从 chrome 扩展读取页面的链接脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28828101/

相关文章:

javascript - Chrome Extension webAudio API 停止 Windows 省电模式

iframe - 如何在谷歌浏览器中创建侧边栏(右侧)?

javascript - Chrome扩展消息传递: verify the sender

javascript - 使用 Nashorn 在 Java 中运行具有导出功能的 Javascript 代码

Javascript - 两个相同的函数,但只有一个有效

javascript - typescript 错误: Type '.....' is not assignable to type 'IntrinsicAttributes & Number'

javascript - 如何与 Grammarly 集成

javascript - React Native,onPress 不适用于从 fontAwesome 导入的图标

javascript - jQuery 宽度();不能正常工作

javascript - 从 localStorage 获取值以在 popup.html 中使用