我可以在新标签页上运行用户脚本吗?

Can I run a userscript on the new tab page?

提问人:Greedo 提问时间:7/25/2017 最后编辑:double-beepGreedo 更新时间:6/16/2022 访问量:3689

问:

我有一个非常简单的用户脚本,是我用 TamperMonkey 编写的,我希望它在 Chrome 新标签页上运行。

根据本站的说法,没有办法在新标签页上运行用户脚本:

新标签页的网址为“chrome://newtab/”,Chrome 不允许扩展程序将脚本注入该页面。

但是如果我在标题部分指定,我的脚本运行良好

// @match        *://*/*

以匹配所有页面。不过,我宁愿代码只在新标签页上运行,这可能吗?


完整脚本:

// ==UserScript==
// @name         Hide Buttons
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Test script
// @author       Greedo
// @match        *://*/*
// @grant        none
// ==/UserScript==
(function(window, chrome) {
    "use strict";
    var doc = window.document;
    doc.getElementById("mv-tiles").style.opacity = "0";
    doc.getElementById("f").style.opacity = "0.1";
}(window, chrome));

我使用的是 Chrome 版本 59.0.3071.115。

javascript google-chrome tampermonkey 用户脚本

评论

1赞 wOxxOm 7/25/2017
1. mv-tiles 位于带有 chrome-search:// URL 的 iframe 中,这些 URL 不可编写脚本 2.Chrome 61.0.3161 及更高版本明确禁止编写新标签页的脚本,请参阅 crrev.com/2978953002
1赞 Greedo 7/25/2017
@wOxxOm我并不完全遵循。如果该元素“不可编写脚本”,那么为什么我的脚本会以当前匹配模式运行?
0赞 wOxxOm 7/25/2017
在 61 年之前使用 Chrome 或所有区域 mirrrors 的正则表达式之前@match https://www.google.com/_/chrome/newtab*
0赞 wOxxOm 7/25/2017
这里: forum.tampermonkey.net/viewtopic.php?t=725
1赞 Aryan Beezadhur 10/23/2020
自 2020 年起,这不再有效。现在唯一的选择是创建一个浏览器扩展程序来修改您的新标签页。

答:

0赞 VirusterDev 6/8/2022 #1

在脚本加载之前,在代码中放置以下要求:

if(document.URL == 'chrome://new-tab-page/'){
    // Your user script code
}
0赞 Arslan Sohail Bano 6/16/2022 #2

尝试使用 并打印 你会看到该属性不包含 but(在我的情况下)。@match *://*/*window.locationhrefchrome://new-tab-page/https://ogs.google.com/u/0/widget/app?origin=chrome-untrusted%3A%2F%2Fnew-tab-page&origin=chrome%3A%2F%2Fnew-tab-page&cn=app&pid=1&spid=243&hl=en

如果我使用该脚本不起作用,但如果使用其他 URL,它确实有效。chrome://new-tab-page/

这是我用来获取 URL 的:

// ==UserScript==
// @name         Hide Buttons
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Test script
// @author       Greedo
// @match        *://*/*
// @grant        none
// ==/UserScript==
(function() {
    "use strict";
    console.log(window.location)
}());