chrome扩展onUpdated发射太晚了

时间:2018-05-04 22:09:12

标签: javascript google-chrome google-chrome-extension

早上好 我尝试使用chrome扩展或usercript来删除脚本,然后再执行它。 我试过了

chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
    chrome.tabs.executeScript(tabid, {file:"test.js"});
    //if (info.status == "complete") {
      //
   // }
});

在test.js中,我删除了第一个脚本元素(仅用于示例)

document.body.querySelectorAll('*')[0].remove()

即使第一次调用test.js已经太晚了,页面内的脚本已经被执行了。 有没有办法在解释之前替换HTML或在执行之前删除脚本?

我还尝试了"run_at": "document_start"用户脚本,但脚本在我要删除的脚本加载到dom之前运行,因此我无法将其删除。 在过去,有可能使用beforeload事件,但它已从chrome中删除。 我还尝试了chrome.runtime.onMessage.addListenerchrome.webRequest.onBeforeRequest.addListener,但是当我重新加载页面时它们没有被触发。 谢谢

1 个答案:

答案 0 :(得分:0)

最后,我使用mitmproxy而不是扩展名,这是一个允许修改内容的代理。

安装mitmproxy:

sudo apt install pip
pip3 install beautifulsoup4
#pip3 uninstall mitmproxy #uncomment if already installed
sudo pip3 install mitmproxy==3.0.4

sudo sysctl -w net.ipv4.ip_forward=1 #maybe facultative

创建一个名为insertJs.py的python修饰符脚本: 以下脚本将在包含$('html, body').animate({".encode('utf-8')

的网站上的;[].push({".encode('utf-8')替换tfarjo
def response(flow):
    if 'tfarjo' in flow.request.url: #here filter url that you want modify
        #here make the replacement you want
        flow.response.content = flow.response.content.replace(
            "$('html, body').animate({".encode('utf-8'),
            ";[].push({".encode('utf-8')
        )

def read_file(filename):
    with open(filename) as f:
        return f.read()

使用修饰符脚本启动mitmproxy:

sudo mitmdump -p 8081 -s "insertJs.py"

kill chrome:file - >退出或“killall chrome”两次

现在我们必须配置代理,创建一个添加mitmproxy的chrome shorcut(在Linux上,它在桌面上是正确的clic并创建新的启动器):

/usr/bin/google-chrome-stable %U --proxy-server=127.0.0.1:8081

尝试使用http页面而不是https,如果可以,请配置https:

对于铬 做同样的事情并安装pem(可能是兼性的) 然后按照这些说明https://superuser.com/questions/1083766/how-do-i-deal-with-neterr-cert-authority-invalid-in-chrome#answer-1083768

(对于firefox,只需点击你的操作系统就可以了,并且配置了https)