расширение chrome правильная реализация двух асинхронных функций - PullRequest
0 голосов
/ 24 августа 2018

надеюсь, что все будет в порядке

Я не идеален в JavaScript, и у меня есть вопрос с двумя асинхронными функциями при разработке расширения Chrome.

хорошо;я хочу реализовать функциональность в расширении Chrome, когда пользователь нажимает на кнопку, должна быть создана новая вкладка, а когда страница полностью загружена, мне нужно отправить сообщение в скрипт содержимого этой страницы.

проблема заключается в функции создания вкладки расширения Chrome, информация о новой созданной вкладке будет отправлена ​​в функцию обратного вызова, и я не могу сохранить идентификатор этой вкладки в глобальной переменной с другой стороны, чтобы понять, когда страница полностью загружена, естьСлушатель, который будет прослушивать состояние вкладок снова, информация об этих вкладках будет отправлена ​​в обратном вызове. Я не знаю, как связать эти две функции вместе, потому что я не могу сохранить информацию идентификатора вкладки в глобальной переменной.

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 голосов
/ 24 августа 2018

Вы можете попробовать связать асинхронные обратные вызовы, такие как:

//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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...