chrome扩展正确实现两个异步功能

时间:2018-08-24 10:18:19

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

希望很好

im在javascript中并不完美,我在开发chrome扩展程序时遇到两个异步函数的问题。

好吧;我想在Chrome扩展程序中实现功能,即当用户单击按钮时,应该创建一个新标签,并且在页面完全加载后,我需要向该页面的内容脚本发送消息。

问题出在chrome扩展的create tab函数中,新创建的tab的信息将在回调函数中发送,另一方面,我无法将该Tab id保存在全局变量中以了解页面何时完全加载有一个侦听器,它将再次侦听选项卡的状态,这些选项卡的信息将在回调中发送,我不知道如何将这两个功能关联在一起,因为我无法将选项卡ID的信息保存在全局变量中。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
        if (info.status === 'complete') {
        chrome.tabs.sendMessage(tab.id, msg);
    }
});


chrome.tabs.create({ url: someurl , active: false },function(tab){

});

再次谢谢你们。 我非常感谢您的帮助,因为确实让我感到困惑,阅读了很多文章,尝试了很多方法,但没有成功。

1 个答案:

答案 0 :(得分:0)

您可以尝试链接异步回调,例如:

//first create the tab
chrome.tabs.create({url: someurl, active:false}, function(tab){
    //once the tab is created, inject the content script
    chrome.tabs.executeScript(tab.id, {file:'yourContentScript.js'}, function(result){
        //as per default, the content script will run AFTER the page has loaded
        //once the content script has run and set up the listener, send the message
        chrome.tabs.sendMessage(tab.id, {message:'hello, content script'});
    });
});

或者您可以使用全局变量,前提是您已为清单中的内容脚本设置了"runAt":"document_idle"

var myTabId;

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (info.status === 'complete' && tabId == myTabId) {
        chrome.tabs.sendMessage(tabId, msg);
    }
});


chrome.tabs.create({ url: someurl , active: false },function(tab){
    myTabId = tab.id;
});