2014-08-27 148 views
0

我想创建一个上下文菜单项,以基于选定文本在新标签上启动新页面,然后使用JavaScript代码修改新标签页的DOM元素。我manifest.json文件是:Chrome浏览器扩展程序:Javascript注入到活动标签

{ 
    "name": "ContextBox", 
    "description": "An experimental context menu addition", 
    "version": "0.5", 

    "permissions": [ 
       "contextMenus" 
       ], 

    "background": { 
     "scripts": ["background.js"] 
    }, 
    "manifest_version": 2 
} 

我的代码background.js:

. 
    . 
    //this is part of handler for context menu item event onClick 
    window.open('https://www.google.com', '_blank'); 
    setTimeout(prxAsync, 1000); 
} 


function prxAsync(){ 
    chrome.tabs.getSelected(null, function(tab) { 
     chrome.tabs.executeScript(null,{code:"alert('hello');"}); 
    }); 
    return; 
} 

这是行不通的。 executeScript不起作用,但不会显示任何错误(使用try-catch)。

回答

0

而不是在window.open混合,你可以保持在Chrome API的范围内。

chrome.tabs.create({url: 'https://www.google.com'}, function(tab){ 
    chrome.tabs.executeScript(tab.id, {code:"alert('hello');"}); 
}); 

没有超时,没有环岛标签搜索。

也就是说,您需要主机权限为programmatic injection。当你创建一个新标签页时,"activeTab"不会帮助你。

"permissions": [ 
    "contextMenus", "https://www.google.com/*" 
], 

您可以使用一揽子许可,像"<all_urls>",但如果你有保存预设的页数要打开,最好明确的列出它们。

+0

请注意,'executeScript'调用也可能需要''tabs“'权限,但这并不确定。 – Xan 2014-08-27 12:10:00

+0

谢谢。它完全工作..我有权限问题,顺便说一句。 – 2014-08-27 15:08:01

相关问题