Chrome扩展程序-将事件消息发送回原始标签

时间:2019-05-28 20:49:36

标签: google-chrome-extension

我正在制作一个Chrome扩展程序,其中content.jsbacground.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开发的新手。我该如何纠正?

如果我不清楚任何部分,请告诉我。

0 个答案:

没有答案