首页 > 解决方案 > chrome扩展正确实现两个异步函数

问题描述

希望没事

我在 javascript 中并不完美,我在开发 chrome 扩展时对两个异步函数有疑问。

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

问题出在chrome扩展的创建选项卡功能中,新创建的选项卡的信息将在回调函数中发送,另一方面我无法将该选项卡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){

});

再次感谢你们。我感谢任何帮助,因为我真的很困惑并阅读了很多文章并尝试了很多方法但没有成功。

标签: javascriptgoogle-chromegoogle-chrome-extension

解决方案


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

//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;
});

推荐阅读