从网页链接到chrome:// URL

17

更新

chrome://about/ 直接链接到 chrome://settings 和其他网址,所以是可行的。

我如何在网页中链接或重定向到 chrome:// 网址?例如,chrome://settings。当尝试点击一个 chrome:// URL 链接时,

<a href="chrome://settings">link</a>

我在控制台中收到一个错误:

Not allowed to load local resource: chrome://settings/

根据这个答案,是可能的:

从扩展选项页面链接到chrome://chrome/extensions

我试过这个脚本:

<a href="#" id="test">test</a>
<script>
document.addEventListener('DOMContentLoaded', function () {
    document.getElementById('test').addEventListener('click', function () {
        chrome.tabs.update({
            url: 'chrome://chrome/extensions'
        });
    });
});
</script>

还有这一个:

<a href="#" onclick="chrome.tabs.create({url:'chrome://settings/clearBrowserData'});">click me</a>

两者都不可行。除此之外,我还尝试过:

  • 使用<a href="chrome://newtab">链接它
  • 使用window.location重定向用户

然而,我相信可能有一种JavaScript解决方法。当用户按下一个链接时,是否可以将URL更改为chrome://settings?用户将需要按Enter,但这似乎是我能得到的最好的结果。


1
你把这段JavaScript代码和HTML放在哪里了?从你对答案的评论来看,似乎你想把这个链接放在网页中。是这样吗?然而,你的JavaScript代码正在使用一个特定于扩展的API。 - Makyen
1
在扩展中能够正常工作的代码与网页中能够正常工作的代码之间存在很大的区别。chrome.tabs是一种专门用于扩展的API,无法在网页中使用。请参见Xan的答案。同时,您提供的链接Link to chrome://chrome/extensions from extension options page也有所描述。 - Makyen
3
chrome://about/已经是使用chrome://协议的URL(即Google Chrome内部 URL)。声称可以从网页链接到chrome://URL,仅因为Chrome内部页面存在链接,这种比较是错误和有缺陷的。已经明确确定,您可以从已经具有特权的URL /代码(请参见详细说明如何从扩展中执行此操作)创建此类链接。 - Makyen
注意:如果您在更新问题时只提供了少量的额外文本而没有改变问题的主要内容,请将更新与问题的主体分开,这样我们就不必去查看编辑差异来确定情况。通常的做法是将更新放在问题底部。 - Makyen
2个回答

25

没有办法从网页上进行操作。

chrome:// 是特权源,任何尝试打开它的行为都会重定向到 about:blank

Chrome 这样做是为了减少攻击面:即使只是打开这些 URL 应该是无害的,但最好不要让网站和外部程序尝试。

此外,这并不是完全无害的,例如调试 URL,如chrome://crashchrome://hang(小心,这些URL确实会像你预期的那样运行)。

显然,您不能使用chrome.tabs ,因为它是一个未公开给网站的扩展 API。 不过,它可以打开特权源。


8
以下内容对我有效;
manifest.json
 {
  "manifest_version": 2,

  "name": "Redirection Sample",
  "description": "Test Redirection",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "activeTab",
    "https://ajax.googleapis.com/"
  ]
}

popup.html

<!doctype html>
<html>
  <head>
    <title>Redirection Popup</title>
    <script src="popup.js"></script>
  </head>
  <body>
  <a href="#" id="test">test</a>
  </body>
</html>

popup.js

  document.addEventListener('DOMContentLoaded', function() {
        document.getElementById('test').addEventListener('click', function() {
            chrome.tabs.update({ url: 'chrome://chrome/extensions' });
        });
    });

icon.png

此链接中添加自定义图标或下载示例。

将这四个文件都放在一个文件夹中,然后将扩展程序包解压并加载到Chrome中。它应该可以工作了!


2
抱歉,我不需要任何扩展程序,因为我的工作场所禁止我们使用它们。我更愿意制定一个适用于所有用户且不需要扩展程序的解决方案。 - mancestr
1
谢谢,我不得不将'chrome://chrome/extensions'更改为'chrome://extension'。 - f-CJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接