通过扩展链接到 chrome://history

Linking to chrome://history through extension

我正在开发一个 chrome 扩展程序,它通过内容脚本 将一些按钮注入页面 ,我想要一个按钮 links 到历史页面 (chrome://history).

这只会打开一个没有 URL 的空白选项卡:

window.open("chrome://history", "_blank");

并且有一个hyperlink到历史页面直接给我一个错误:

<a href="chrome://history" target="_blank">...</a>

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

Chrome's Extension API 没有将 chrome://* 列为扩展页面支持的方案,这解释了错误,但我想做的就是向历史提供 link页。有什么办法可以做到这一点,即使它有点(或很多)令人费解?

谢谢!

编辑:补充说这是通过内容脚本完成的,我没有在最初的 post.

中澄清这一点

Chrome 中的代码,用于打开带有历史内部页面的新活动选项卡

chrome.tabs.create({'url': 'chrome://history', 'active': true});

Wolf War 的回答是正确的,但是,对于内容脚本,还需要一个额外的步骤。

需要一个background (or better, event) page to process the request, since content scripts can't call that API. You need to use Messaging:

// Content script
// element is your DOM element
element.addEventListener("click", function(e) {
  chrome.runtime.sendMessage({command: "openHistory"});
});

// Event script
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
  if(command == "openHistory") {
    chrome.tabs.create({'url': 'chrome://history'});
  }
});

让我想到了向我的扩展本身发送消息并让它从那里启动选项卡,这很有效。

我将此添加到我的内容脚本中,以在页面上插入按钮:

$("#history_button").click( function() {
    chrome.runtime.sendMessage({
        type: "OPEN_HISTORY"
    });
});

并在我的扩展 background script 中添加了相应的监听器来创建标签:

chrome.runtime.onMessage.addListener( function(request) {
    if (request.type == "OPEN_HISTORY") {
        chrome.tabs.create({ "url": "chrome://history", "active": true });
    }
});