这是 Chrome 扩展程序的一个已知功能,称为孤立世界。内容脚本被注入到目标页面中,不能直接从扩展的其他部分访问。要进行交互,您应该使用消息传递。
这是对相关问题的一个有点过时的SO 答案,这可能有助于全面了解情况。在答案中,您应该调整代码以使用sendMessage
而不是sendRequest
,它已被删除以支持第一个。
例如,您在后台页面中放置以下调用(取自文档):
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, // you can send "DoSomething" for example
function(response) {
console.log(response.farewell);
});
});
在内容脚本中,您应该收听消息:
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if(request.greeting == "hello")
sendResponse({farewell: "goodbye"});
// else if(request.greeting == "DoSomething") DoSomething();
});
我不认为getViews
方法是你想要的,因为它返回你的扩展页面(背景、弹出窗口、选项),而不是你的内容脚本被注入的页面。我想你应该sendMessage
从你的内容脚本到后台页面,以便以后“知道”所有脚本主机页面,或者你可以使用executeScript
.
chrome.tabs.executeScript(tabId, {code: 'DOsomething();'})