Расширение Chrome - отправка сообщения о событии обратно на исходную вкладку - PullRequest
0 голосов
/ 28 мая 2019

Я делаю расширение 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. как я могу исправить это?

Дайте мне знать, если мне непонятно в какой-либо части.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...