我正在制作一个Chrome扩展程序,其中content.js
向bacground.js
发送事件,该事件向服务器请求URL。收到的URL发送回content.js,可在请求的制表符上浏览。例如:-如果已请求Tab1,则应在同一选项卡上浏览URL,而不是在另一个选项卡上浏览。
这是我的内容和background.js
Content.js
// sending details to `background.js`.
message = {
'event_type': 'Event1',
}
chrome.runtime.sendMessage(message);
// listening to `background.js` response.
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if(request.event_type === 'Event1Response') {
window.location.href = request.data.url;
}
}
);
Background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse){
if(request.event_type === 'Event1'){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
message = { //response from the server
'event_type': 'Event1Response',
'data': {
'url': some_url
}
}
// Sending response back to the `content.js`.
var activeTab = tabs[0];
chrome.tabs.sendMessage(activeTab.id, message);
}
}
}
});
}
}
);
Manifest.json
{
"manifest_version": 2,
"version": "0.1",
"content_scripts": [{
"matches": [
"*://www.example.in/*",
],
"js": ["js/content.js"],
"run_at": "document_start"
}, {
"matches": [
"*://www.example2.com/*"
],
"js": ["js/content.js"],
"run_at": "document_start"
}],
"background": {
"scripts": ["js/background.js"],
"persistent": false
},
"browser_action": {
// "default_icon": "icon.png",
"default_popup": "popup.html",
"default_title": "Click here!"
},
"permissions": [
"tabs"
]
}
我面临的问题是,响应将返回到CURRENT活动选项卡,而不是从中请求响应的实际选项卡。例如:-
1)假设我有2个标签T1和T2。
2)我在T1中的状态为example.in
。
3)现在,我在T2上打开example2.in
,然后迅速切换到T1标签。
4)T1将收到服务器URL U1的响应,并浏览到U1。相反,应该已经浏览过U1的T2收到了响应。
这是因为我正在将其发送到background.js
中当前的活动标签中。
如何将响应发送到发起请求的实际选项卡?我是Chrome开发的新手。我该如何纠正?
如果我不清楚任何部分,请告诉我。