Javascript 更新的chrome扩展启动太晚

Javascript 更新的chrome扩展启动太晚,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,早上好 我尝试使用chrome扩展或userscript在他被执行之前删除一个脚本。 我试过了 chrome.tabs.onUpdated.addListener(function(tabid, info, tab) { chrome.tabs.executeScript(tabid, {file:"test.js"}); //if (info.status == "complete") { // // } }); 在test.js中,我删除了第一个脚本元素(

早上好 我尝试使用chrome扩展或userscript在他被执行之前删除一个脚本。 我试过了

chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
    chrome.tabs.executeScript(tabid, {file:"test.js"});
    //if (info.status == "complete") {
      //
   // }
});
在test.js中,我删除了第一个脚本元素(仅用于示例)

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

我还尝试了userscript的
“run\u at”:“document\u start”
,但该脚本是在我要删除的脚本加载到dom之前运行的,因此我无法删除它。 在过去,beforeload事件是可能的,但它已从chrome中删除。 我还尝试了
chrome.runtime.onMessage.addListener
chrome.webRequest.onBeforeRequest.addListener
,但当我重新加载页面时,它们不会被触发。
谢谢

最后,我使用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')
)by
;[]在包含
tfarjo
的站点上推送({.encode('utf-8')

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"
杀死chrome:file->quit或“
杀死所有chrome
”两次

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

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

铬 执行相同操作并安装pem(可能是兼性的) 然后按照这些说明去做


(对于firefox,只需点击操作系统并配置https即可实现)

那没用。你必须重写整个页面的html。当然,你还需要在executeScript中使用runAt:“document\u start”。谢谢你。这个方法的问题是请求发出了两次,但如果我可以先阻止第一个请求,它就是解决方案。不幸的是,在Chrome中,这是唯一的方法。window.stop()这还不够,我已经用document.close();window.stop();替换了它,即使我们损失了一点时间,它仍然可以工作。
sudo mitmdump -p 8081 -s "insertJs.py"
/usr/bin/google-chrome-stable %U --proxy-server=127.0.0.1:8081