我对Chrome扩展程序开发非常陌生,我想做一些非常简单的事情,但我不确定它为什么不起作用。 从本质上讲,我想:
我的清单中的权限是" activeTab","存储","标签"。
以下是我尝试用于测试目的的代码
chrome.tabs.executeScript(null, {file: "injected.js"});
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse){
console.log("message received!");
});
var url = "";
// get the url of the current tab
chrome.tabs.query({currentWindow: true, active: true},
function(tabs) {
url = tabs[0].url;
console.log("running");
});
chrome.runtime.sendMessage({"url": url});
问题是"收到了消息!"我使用调试器时从不打印到控制台,但是"运行"打印就好了。我看过似乎有类似问题的问题:
所接受的答案似乎都不适合我。我尝试将return true;
添加到onMessage事件监听器中,但它似乎无法正常工作。我也没有在调试器中的控制台上出现任何错误(点击" Inspect Popup")。我觉得自己错过了一些微不足道的东西,但我不知道该怎么做才能猜到它。有没有理由说onMessage没有收到任何东西?
答案 0 :(得分:1)
documentation列出了内容脚本中允许的几个chrome API,而不是chrome.tabs
。
解决方案:在弹出窗口等特权页面中使用
chrome.tabs
。
与所有具有回调函数chrome.tabs.query
的Chrome API一样,asynchronous并在执行当前函数/上下文后调用回调。所以下一个语句只会看到旧的url
(空字符串)。
解决方案:在回调中处理收到的数据。
因此,在您的方案中,根本不需要内容脚本,以及"activeTab" documentation中的"tabs"
权限:它会在用户手势之后自动设置临时权限单击扩展工具栏弹出窗口。