我有一个简单的Chrome扩展程序,无法通过键盘快捷键来触发。我的扩展程序查看匹配的URL,从中提取客户ID,然后将该客户ID附加到Tableau Online URL,并重定向页面或在Tableau Online上打开一个新标签到该页面。
我的manifest.json和runtime.js文件具有:
manifest.js
...
"permissions": ["storage", "declarativeContent", "activeTab", "tabs"],
...
"commands": { "open_tableau_report":
{ "suggested_key": { "default": "Ctrl+Shift+Y" }, "description": "Open Tableau Report"}},
...
runtime.js
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
if (msg.text) {
switch (msg.text) {
case 'open_tableau_report':
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
chrome.storage.sync.get(['tableauBaseUrl','vsExtTarget'], function(items){
let url = tabs[0].url;
let vsid = url.match(/https:\/\/foo.com\/customers\/detail\/([a-f0-9]{24})/)[1];
target = items.vsExtTarget;
tableau_base_url = items.tableauBaseUrl;
if (target == 'new') {
chrome.tabs.create({url: tableau_base_url + vsid}); // new tab
} else {
chrome.tabs.update({url: tableau_base_url + vsid}); // same tab
}
});
});
break;
default:
sendResponse('');
}
}
});
当我触发快捷键组合时,我在Chrome DevTools中看到此错误:
Error in event handler: TypeError: Cannot read property 'query' of undefined
at chrome-extension://pdjmgncpljjageanemimmdfpdokdfodm/main.js:5:16
是否已在权限中添加了“标签”,我假设Chrome扩展程序根本无法访问chrome.tabs
?如何重新编写runtime.js中的代码以响应键盘快捷键?谢谢!!