Я делаю расширение 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) Теперь я открываю example2.in
на T2 и быстро переключаюсь на вкладку T1.
4) T1 получит ответ от URL сервера U1 и перейдет к U1. Вместо этого ответ должен был быть получен T2, который должен был просмотреть U1.
Это потому, что я отправляю его на текущую активную вкладку в моем background.js
.
Как я могу отправить ответ на фактическую вкладку, где был инициирован запрос? Я новичок в разработке Chrome. как я могу исправить это?
Дайте мне знать, если мне непонятно в какой-либо части.