从Chrome扩展程序中打开chrome:// newtab

时间:2013-02-07 00:23:45

标签: javascript google-chrome-extension

我尝试编写一个Google Chrome扩展程序,只需在短暂的间隔内左键单击即可打开新标签页。 JavaScript没有问题,但我将其实现为“content_scripts”脚本。

在其他一些主题中,我读到我无法访问来自content_scripts的chrome。* API(chrome.extension API除外)。

即使没有必要访问chrome.tabs API来打开一个新窗口(window.open应该完成这项工作),但似乎我需要它来打开带有新标签页的新标签 这显然是不可能通过window.open。

所以我无法弄清楚最好的方法是什么。我可以使用我可以从content_script调用的后台页面,但我认为应该是一种更简单的方法,我只是不明白。

有人有想法吗?

2 个答案:

答案 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"
    ]
  }]

好吧我很想理解这个问题...修改了