有时未注入Chrome扩展内容脚本

ykejflvf  于 2023-03-16  发布在  Go
关注(0)|答案(1)|浏览(151)

我有一个chrome扩展来填充某些网站上的表单。这一切都工作得很好,但是偶尔填充表单的内容脚本不会被注入,然后我必须重新安装扩展来解决这个问题。这是我用来注入内容脚本的代码:

chrome.tabs.create({ url: url, active: true }, function (tab) {  //create tab
    chrome.tabs.onUpdated.addListener(function listener(tabId, info) {
        if (info.status === 'complete' && tabId === tab.id) {
            chrome.tabs.onUpdated.removeListener(listener);               
                chrome.tabs.executeScript(tab.id, { file: 'library.js', allFrames: true, runAt: "document_end" }, function () {                        
                    chrome.tabs.executeScript(tab.id, { file: 'fillForm.js', allFrames: true, runAt: "document_end" }, function () {
                        //inject content script
                        chrome.tabs.sendMessage(tab.id, { formData });  //send message to content script
                    });
            });
        }
    });
});

我想这是某种时间问题,或者是Chrome API程序接口发生了变化?因为这个问题最近才出现。

jv2fixgn

jv2fixgn1#

你说得对,这是executeScript定时的一个bug,here是我解决它的方法;与其说是一个解决方案,不如说是一个黑客,但它是有效的,将脚本一致地注入到生成的选项卡中:

function _func(res){
    setTimeout( () => {
    // Do things with the page.
    }, 3000);
}
chrome.tabs.create({url: 'https://www.example.com'}).then((tab) => {
    setTimeout(() => {
        chrome.scripting.executeScript({
            target: {tabId: tab.id},
            func: _func //,
            // I used args in my case, you dont have to. args: [msg.content]
        })
    }, 3000)
});

相关问题