Chrome 扩展程序在新标签页上打开新标签页
Chrome extension open new tab on new tab
我创建了一个 Chrome 扩展程序,作为其操作的一部分,它会打开一个具有指定 url 的新选项卡。
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "open_new_tab" ) {
chrome.tabs.create({"url": request.url});
}
}
);
(完整代码可在 GitHub 上获得)
这在带有网页的选项卡上工作正常,但我无法让它在空选项卡上工作,例如:chrome://apps/
澄清一下,如果我打开了一个选项卡并且它在 whosebug.com ,然后当我单击我的扩展程序按钮时,它会打开一个新选项卡加载生成的 url。当我在新标签页或 url 以 chrome://
开头的标签页时,扩展名不起作用。
我需要包含什么权限才能允许扩展程序在任何选项卡中打开?包括新标签和任何 chrome://
标签?
Manifest.json:
{
"manifest_version": 2,
"name": "MyMiniCity Checker",
"short_name": "MyMiniCity Checker",
"description": "Checks what your city needs most and redirects the browser accordingly.",
"version": "0.2",
"author":"Richard Parnaby-King",
"homepage_url": "https://github.com/richard-parnaby-king/MyMiniCity-Checker/",
"icons": {
"128": "icon-big.png"
},
"options_page": "options/options.html",
"browser_action": {
"default_icon": "icon.png"
},
"permissions": ["tabs","storage","http://*.myminicity.com/","http://*/*", "https://*/*"],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [ {
"matches": [ "http://*/*", "https://*/*"],
"js": [ "jquery-1.11.3.min.js" ]
}]
}
Background.js:
//When user clicks on button, run script
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, { file: "jquery-1.11.3.min.js" }, function() {
chrome.tabs.executeScript(null, { file: "contentscript.js" });
});
});
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "open_new_tab" ) {
chrome.tabs.create({"url": request.url});
}
}
);
似乎 background.js 文件没有被执行。我怀疑这是一个权限。我需要什么权限才能 运行 每个选项卡中的此扩展程序?
好吧,这条消息应该来自您尝试注入当前选项卡的内容脚本。
最宽的 permission you can request 是 "<all_urls>"
,但是,仍有一些 URL 被排除在外。
只能正常访问http:
、https:
、file:
和ftp:
方案。
file:
方案要求用户在chrome://extensions/
中手动批准访问:
出于安全原因,Chrome 禁止访问网上商店 URL are specifically blacklisted。没有覆盖。
chrome://
URL(也称为 WebUI)出于安全原因被排除。标志中有一个手动覆盖:chrome://flags/#extensions-on-chrome-urls
,但你永远不能指望它在那里。
上述情况有一个例外,如果您声明确切的权限,chrome://favicon/
URL 是可以访问的。
总而言之,即使拥有最广泛的权限,您也无法确定自己是否有权访问。在 executeScript
的回调中检查 chrome.runtime.lastError
并优雅地失败。
因为我想在每个页面上 运行 这意味着我不能在内容脚本中包含代码。我将所有代码都移到了后台脚本中:
chrome.browserAction.onClicked.addListener(function(tab) {
//...
chrome.tabs.create({"url": newTabUrl});
//...
});
所以当我点击我的按钮时,上面的代码被调用,使用随附的 jquery 脚本。
我创建了一个 Chrome 扩展程序,作为其操作的一部分,它会打开一个具有指定 url 的新选项卡。
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "open_new_tab" ) {
chrome.tabs.create({"url": request.url});
}
}
);
(完整代码可在 GitHub 上获得)
这在带有网页的选项卡上工作正常,但我无法让它在空选项卡上工作,例如:chrome://apps/
澄清一下,如果我打开了一个选项卡并且它在 whosebug.com ,然后当我单击我的扩展程序按钮时,它会打开一个新选项卡加载生成的 url。当我在新标签页或 url 以 chrome://
开头的标签页时,扩展名不起作用。
我需要包含什么权限才能允许扩展程序在任何选项卡中打开?包括新标签和任何 chrome://
标签?
Manifest.json:
{
"manifest_version": 2,
"name": "MyMiniCity Checker",
"short_name": "MyMiniCity Checker",
"description": "Checks what your city needs most and redirects the browser accordingly.",
"version": "0.2",
"author":"Richard Parnaby-King",
"homepage_url": "https://github.com/richard-parnaby-king/MyMiniCity-Checker/",
"icons": {
"128": "icon-big.png"
},
"options_page": "options/options.html",
"browser_action": {
"default_icon": "icon.png"
},
"permissions": ["tabs","storage","http://*.myminicity.com/","http://*/*", "https://*/*"],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [ {
"matches": [ "http://*/*", "https://*/*"],
"js": [ "jquery-1.11.3.min.js" ]
}]
}
Background.js:
//When user clicks on button, run script
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, { file: "jquery-1.11.3.min.js" }, function() {
chrome.tabs.executeScript(null, { file: "contentscript.js" });
});
});
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "open_new_tab" ) {
chrome.tabs.create({"url": request.url});
}
}
);
似乎 background.js 文件没有被执行。我怀疑这是一个权限。我需要什么权限才能 运行 每个选项卡中的此扩展程序?
好吧,这条消息应该来自您尝试注入当前选项卡的内容脚本。
最宽的 permission you can request 是 "<all_urls>"
,但是,仍有一些 URL 被排除在外。
只能正常访问
http:
、https:
、file:
和ftp:
方案。file:
方案要求用户在chrome://extensions/
中手动批准访问:
-
出于安全原因,
Chrome 禁止访问网上商店 URL are specifically blacklisted。没有覆盖。
chrome://
URL(也称为 WebUI)出于安全原因被排除。标志中有一个手动覆盖:chrome://flags/#extensions-on-chrome-urls
,但你永远不能指望它在那里。上述情况有一个例外,如果您声明确切的权限,
chrome://favicon/
URL 是可以访问的。
总而言之,即使拥有最广泛的权限,您也无法确定自己是否有权访问。在 executeScript
的回调中检查 chrome.runtime.lastError
并优雅地失败。
因为我想在每个页面上 运行 这意味着我不能在内容脚本中包含代码。我将所有代码都移到了后台脚本中:
chrome.browserAction.onClicked.addListener(function(tab) {
//...
chrome.tabs.create({"url": newTabUrl});
//...
});
所以当我点击我的按钮时,上面的代码被调用,使用随附的 jquery 脚本。