Javascript 以编程方式打开Chrome插件';s options.html页面?
有没有办法通过background.html中的Javascript打开Google Chrome插件的options.html页面?如果不使用Chrome API,只有标准的Web API,以下是可能的: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
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});
}
});