我正在使用executeScript
在当前活动标签中运行。但在其回调函数中,我想向正在执行的脚本发送消息......
chrome.tabs.executeScript(null, {
file: 'src/js/scripts/extractCSS.js'
}, function() {
chrome.tabs.sendMessage(this.props.source);
this.props.source
是我想要传递的对象。在src/js/scripts/extractCSS.js
里面,我试图抓住这个消息......
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
console.log(message);
});
但是我收到以下错误......
Error in response to tabs.executeScript: Error: Invocation
of form tabs.sendMessage(object) doesn't match definition
tabs.sendMessage(integer tabId, any message, optional object
options, optional function responseCallback)
根据我的收集,我需要定义tabId
,但我只需要将消息发送到活动标签。我尝试为null
添加tabId
,但它仍然给我一个错误。
我该如何解决这个问题?
答案 0 :(得分:3)
即使是活动标签,您也必须通过tabId
。 chrome.tabs.query
可用于获取标签。您可以通过以下方式执行此操作:
chrome.tabs.query(
{ currentWindow: true, active: true },
function (tabArray) {
chrome.tabs.executeScript(tabArray[0].id, {
file: 'src/js/scripts/extractCSS.js'
}, function() {
chrome.tabs.sendMessage(this.props.source);
})
}
);
由于当前窗口中只能有一个活动标签,tabArray
只有一个元素,然后可以访问id
属性。