google-chrome-extension - 如何为特定选项卡激活 chrome.runtime.onMessage.addListener?
问题描述
我正在创建一个 chrome 扩展程序,并为此过程使用消息传递。过程是这样的: 1.- popup.js 当我点击弹出的元素时向后台发送请求。
function sendMessageToContent(contactName){
chrome.runtime.sendMessage({elementValue: contactName}, function(response) {
console.log(response.farewell);
});
}
2.- background.js 监听请求。
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if(request.elementValue != null){
var accessToken = localStorage.getItem('accessToken');
var instanceUrl = localStorage.getItem('instanceUrl');
getContactByName(accessToken,instanceUrl,request.elementValue);
sendResponse({farewell: "ContactResponse"});
}
});
它向 content.js 发送另一个请求。
function getContactByName(accessToken,instanceUrl,contactName){
var urlQuery = 'query';
fetch(instanceUrl+urlQuery,{
method: 'get',
headers: new Headers({
'Authorization': 'Bearer '+accessToken,
'Content-Type': 'application/json'
})
})
.then(response => {
if(response.status != 200){
showAuthNotification();
}
return response.json()
})
.then(data => {
for(var i = 0; i<data.totalSize; i++){
contact.push({name:data.records[i].Name, email:data.records[i].Email, id:data.records[i].Id});
}
localStorage.setItem('contactInfo', JSON.stringify(contact));
chrome.tabs.query({}, function (tab) {
chrome.tabs.update(tab[4].id, {active: true});
chrome.tabs.sendMessage(tab[4].id, {message: "OK"});
}
});
})
.catch(function (error) {
console.log('Request failure: ', error);
})
}
3.-问题出在这一步,后台的请求发送后应该打开一个特定的选项卡,content.js上的监听器应该接受请求。此过程仅在我在当前选项卡中时有效,当我使用chrome.tabs.update(tab[4].id, {active: true});
侦听器激活另一个选项卡时
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log(request.message);
});
不听请求。
我怎样才能使侦听器对所有请求或特定选项卡都处于活动状态,而不仅仅是当前点击?
解决方案
推荐阅读
- wordpress - paginate_links() 在查询字符串中显示当前页面
- c++ - 使用 libgit2 从另一个分支创建新的 git 存储库?
- angular - Angular 6 - 使用延迟加载模块时反应形式出现问题
- amazon-web-services - 负载平衡多实例集群背后的事件源
- c# - 如何在不强制用户进行身份验证的情况下以编程方式读取租户 ID 或 AAD 域名
- css - CSS 不可预测的包装习惯
- javascript - 使用正则表达式抓取 url iframe 字符串
- javascript - Fetch:如何使用etags?
- java - 地理编码器仅返回空对象
- python - KeyError 没有格式化错误信息