1

我尝试编写一个 Google Chrome 扩展程序,当我在短时间内单击左右时,它只会打开一个新选项卡。JavaScript 没问题,但我将其实现为“content_scripts”脚本。

在其他一些线程中,我读到我无法从 content_scripts 访问 chrome.* API(chrome.extension API 除外)。

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

所以我真的不知道什么是最好的方法。我可以使用可以从 content_script 调用的背景页面,但我认为应该有一种更简单的方法来做到这一点,我只是不明白。

有人有想法吗?

4

2 回答 2

1

我认为您的内容脚本必须向您的后台页面发送一条消息才能调用chrome.tabs.create- 内容脚本不能使用 chrome api,也不能直接与后台页面通信。

这是有关在 Chrome 扩展中传递消息的参考以获取更多详细信息,但这里是示例代码(根据上述参考中的示例修改)

// 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.
});
于 2013-02-07T00:40:05.980 回答
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"
    ]
  }]

好吧,我想念理解这个问题...已修改

于 2013-02-07T01:28:31.037 回答