Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以编程方式打开Chrome插件';s options.html页面?_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 以编程方式打开Chrome插件';s options.html页面?

Javascript 以编程方式打开Chrome插件';s options.html页面?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,有没有办法通过background.html中的Javascript打开Google Chrome插件的options.html页面?如果不使用Chrome API,只有标准的Web API,以下是可能的: window.open("chrome-extension://ghipmampnddcpdlppkkamoankmkmcbmh/options.html") 或者,要从可见页面导航到扩展页面,请执行以下操作: location.href = "chrome-extension://ghi

有没有办法通过background.html中的Javascript打开Google Chrome插件的options.html页面?

如果不使用Chrome API,只有标准的Web API,以下是可能的:

window.open("chrome-extension://ghipmampnddcpdlppkkamoankmkmcbmh/options.html")
或者,要从可见页面导航到扩展页面,请执行以下操作:

location.href = "chrome-extension://ghipmampnddcpdlppkkamoankmkmcbmh/options.html"
这需要对扩展ID进行硬编码

与使用ChromeAPI相比,这可能是唯一一次更可取的做法,即从非扩展上下文调用ChromeAPI时(而不是最初的“从后台页面”场景)。但是,请注意,web上下文无法导航到
chrome扩展名://*
页面(它将导致
about:blank
),除非它是空的

在这样的场景中,我们也应该考虑通过内容脚本或是与网页进行通信。 更新

从版本40开始,Chrome现在从扩展管理页面使用一个新的弹出选项对话框,而不是专用选项页面(不推荐使用)。您仍然可以通过修改URL来实现相同的效果

chrome.tabs.create({ 'url': 'chrome://extensions/?options=' + chrome.runtime.id });

打开或切换到已打开的选项页(而不是打开副本):


有一种新方法已启用:

如果可能,打开扩展的选项页

确切的行为可能取决于清单的
选项\u ui
选项\u页面
键,或者Chrome当时支持什么。例如,页面可以在
chrome://extensions
,在应用程序中,或者它可能只关注打开的选项页面。它永远不会导致调用者页面重新加载

如果扩展没有声明选项页,或者Chrome由于其他原因无法创建选项页,则回调将设置
lastError


未捕获类型错误:无法调用此答案的更新部分中未定义的“create”方法。您忘记了“url:”部分。调用应该是
chrome.tabs.create({“url”:”chrome://extensions/?options=“+chrome.runtime.id})chrome.runtime.openOptionsPage()
的推出,似乎连更新都过时了。是的,这在
chrome.runtime.openOptionsPage()中有点不推荐使用
chrome.runtime.openOptionsPage()
仅适用于您自己的扩展选项,不适用于其他扩展选项(例如通过
管理
权限),这样您就必须知道扩展的密钥。这是模棱两可的。接受的答案更好。@szamil我将保留这个答案,因为它允许非开发人员通过javascript和外部扩展打开选项页面。我不确定这是否是原始海报的意图(事实上不太可能),但这个答案在某些时候可能对某些人有用。并不是说我为这个答案感到骄傲。。。我认为这个答案很糟糕,但这就是投票制度的目的。@JosephMarikle你说得对。这个答案在实践中很糟糕,但它有助于理解内部工作。“我将保留这个答案,因为它允许非开发人员通过javascript和外部扩展打开选项页面。”除非该页面列在
web\u accessible\u resources
中,否则该页面将不再正确-如果尝试以这种方式导航,您将获得
about:blank
。@Xan感谢您提供的信息!我将删除我的答案。
chrome.extension.getURL
不是必需的
update
create
都接受与调用页面或脚本相关的URL。实际上,chrome.extension.getURL是必需的。不接受URL的片段标识符。还需要注意的是,由于您试图访问选项卡URL,因此需要选项卡权限。在Firefox的WebExtensions中可用之前,它仍然可用作
OpenOptionPage
的垫片。对于打开内部和外部URL来说,这很好,注意:需要在
权限:
中添加
“选项卡”
,请参见示例:
“权限”:[“选项卡”]
+1这是正确的方法。人们应该使用这种方式,而不是chrome.tabs.create(…options.html…)这是唯一一种不会被恶意攻击的方式。
chrome.tabs.create({ 'url': 'chrome://extensions/?options=' + chrome.runtime.id });
var optionsUrl = chrome.extension.getURL('options.html');

chrome.tabs.query({url: optionsUrl}, function(tabs) {
    if (tabs.length) {
        chrome.tabs.update(tabs[0].id, {active: true});
    } else {
        chrome.tabs.create({url: optionsUrl});
    }
});