Javascript 如何更改about:newtab的背景

Javascript 如何更改about:newtab的背景,javascript,firefox,firefox-addon,firefox-addon-webextensions,Javascript,Firefox,Firefox Addon,Firefox Addon Webextensions,我正在尝试使用新版本更改Firefox中的about:newtab的背景。目前,我不明白为什么在调试控制台中收到以下错误消息: Unchecked lastError值:错误:没有窗口匹配{“matcheshot”:[] 我的附加组件的代码如下所示: manifest.json { “背景”:{ “脚本”:[“background.js”] }, “描述”:“您的域描述”, “主页地址”:https://yourdomain.com", “图标”:{ “64”:“icons/icon-64.p

我正在尝试使用新版本更改Firefox中的
about:newtab
的背景。目前,我不明白为什么在调试控制台中收到以下错误消息:

Unchecked lastError值:错误:没有窗口匹配{“matcheshot”:[]
我的附加组件的代码如下所示:

manifest.json

{
“背景”:{
“脚本”:[“background.js”]
},
“描述”:“您的域描述”,
“主页地址”:https://yourdomain.com",
“图标”:{
“64”:“icons/icon-64.png”
},
“清单版本”:2,
“名称”:“您的域名”,
“权限”:[
“标签”,
“活动选项卡”
],
“版本”:“2.0”
}
background.js:

var-tabId;
函数changeBackground(){
chrome.tabs.insertCSS(tabId{
代码:“正文{边框:20px点粉色;}”
});
}
已创建函数句柄(选项卡){
如果(tab.url==“关于:newtab”){
控制台日志(选项卡);
tabId=tab.id;
changeBackground();
}
}
chrome.tabs.onCreated.addListener(handleCreated);
目前无法更改WebExtensions附加组件
关于:newtab
这是当您尝试注入的页面与不匹配或无法表示为匹配模式(即URL必须能够表示为,即使您没有提供匹配模式)时收到的错误。匹配模式必须具有
http
https
file
ftp
app
中的一种。您看到的错误是由于未在中检查回调函数中的
运行时.lastError
值而导致的,该错误是您尝试将代码或CSS插入
about:
页面时预期的错误

MDN文档非常具体地说明了不能与任何
about::
页面一起使用(重点是我的):

您只能将CSS注入到URL可以使用匹配模式表示的页面中:这意味着,其方案必须是“http”、“https”、“文件”、“ftp”之一这意味着您不能将CSS插入浏览器的任何内置页面,例如
关于:调试
关于:加载项
,或打开新的空选项卡时打开的页面[
关于:新选项卡

未来:
Chrome具有manifest.json键,该键允许覆盖以下任何一项:
书签
历史
、或
newtab
。看来,

备选方案:
可以使用覆盖newtab页面

您可以使用WebExtensions检测选项卡是否已将其URL更改为
about:newtab
,并将选项卡重定向到您选择的页面

通常使用
tabs.insertCSS()
或用于制表符 如果在选项卡通常包含常规URL的情况下使用
tabs.insertCSS()
tabs.executeScript()
,但可能是
about*:
(或
chrome:
scheme on chrome)(例如
browser\u action
按钮),则可以使用以下代码处理错误(在Firefox WebExtensions和Chrome中测试和使用):

然后,您可以将
changeBackground()
代码更改为:

function changeBackground(tabId) {
    chrome.tabs.insertCSS( tabId, {
        code: "body { border: 20px dotted pink; }"
    }, handleExecuteScriptAndInsertCSSErrors.bind(null,tabId));
}

显然,这样更改代码实际上不允许您更改
关于:newtab
页面上的背景。

谢谢@Makyen。当我插入新函数并修改我的changeBackground(tabId)函数时,我收到以下消息:
alert()在后台窗口中不受支持;请改用console.log。
因此我将以下行从
警报('This extension'+chrome.runtime.id+',not work'+extraMessage);
更改为:
console.log('This extension'+chrome.runtime.id+',not worked'+extraMessage)
正如您已经提到的,我无法更改带有Web扩展的about:newtab页面。这就是。强制打开并显示一行文本,就如同我们在Firefox中使用
alert()
一样WebExtensions后台脚本中的模式窗口]。从您的注释中可以看出,代码中的注释“这是自动在控制台中,而不是警报”显然是不够的。我将对其进行更新。您是在尝试完全覆盖页面,还是只需要更改背景颜色?
function changeBackground(tabId) {
    chrome.tabs.insertCSS( tabId, {
        code: "body { border: 20px dotted pink; }"
    }, handleExecuteScriptAndInsertCSSErrors.bind(null,tabId));
}