我尝试编写一个Google Chrome扩展程序,只需在短暂的间隔内左键单击即可打开新标签页。 JavaScript没有问题,但我将其实现为“content_scripts”脚本。
在其他一些主题中,我读到我无法访问来自content_scripts的chrome。* API(chrome.extension API除外)。
即使没有必要访问chrome.tabs API来打开一个新窗口(window.open应该完成这项工作),但似乎我需要它来打开带有新标签页的新标签 这显然是不可能通过window.open。
所以我无法弄清楚最好的方法是什么。我可以使用我可以从content_script调用的后台页面,但我认为应该是一种更简单的方法,我只是不明白。
有人有想法吗?
答案 0 :(得分:1)
我认为您的内容脚本必须向您的后台页面发送消息以调用chrome.tabs.create
- 内容脚本无法使用chrome api,也无法直接与后台页面通信。
以下是关于在Chrome扩展程序中传递的消息的reference以获取更多详细信息,但这里是示例代码(根据所述参考中的示例进行了修改)
// in background
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
switch ( request.action) {
case 'newTab' : {
//note: passing an empty object opens a new blank tab,
//but an object must be passed
chrome.tabs.create({/*options*/});
// run callback / send response
} break;
}
return true; //required if you want your callback to run, IIRC
});
// in content script:
chrome.extension.sendMessage({action: "newTab"}, function(response) {
//optional callback code here.
});
答案 1 :(得分:1)
简单易用
document.body.onclick = function openNewWindow( ) {
window.location.href = 'javascript:void window.open( "chrome://newtab" )';
}
清单:
,"permissions":[
"http://*/*"
,"https://*/*"
]
,"manifest_version": 2
,"content_scripts":[{
"matches":[
"http://*/*"
,"https://*/*"
]
,"js":[
"js/openWindow.js"
]
}]
好吧我很想理解这个问题...修改了