2017-01-22 17 views
0

我一直在试验铬扩展API,我注意到chrome.tabs.sendMessage没有通过tabId作为sender,但另一个id/哈希字符串doesn' t对应于tabId。任何人知道这是为什么?谢谢。chrome.tabs.sendMessage不通过tabId发件人

https://developer.chrome.com/extensions/tabs#method-sendMessage

这里是我运行代码:

清单

"permissions": [ 
    "activeTab", 
    "tabs" 
    ] 

event.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: "content-script.js"}); 
    sendMessageToContent; 
}); 

function sendMessageToContent() { 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello", tab: tabs[0].id}, function(response) { 
     }); 
     }); 
    } 

内容的script.js

console.log('script injected'); 

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.debug('tab', request.tab); 
    console.debug('sender', sender); 
    }); 

结果:

tab 1487 
sender { id: "ldolkkbojegiehpmacmglfdlndkhlace" } 

回答

1

chrome.runtime API docssender.tab,因此sender.tab.id只有当消息从一个正常的标签发送的存在,但是你发送从一个扩展弹出,这是一个separate extension page,而不是一个选项卡。因此sender包含您自己的扩展的id

+0

是的,你绝对正确。 Sender.id包含当前背景页面的ID:'chrome-extension:// ldolkkbojegiehpmacmglfdlndkhlace/_generated_background_page.html' 我认为传递tabId会改变消息的来源是我的错误。谢谢。 – holmberd

相关问题