我的“头”在哪里?

Where's my `head` at?

在 GameFAQS 上浏览时,我的一个 Greasemonkey 脚本与 Firefox 56 版崩溃了。这是一个非常简单的脚本:

// ==UserScript==
// @name        MakeSignaturesBlack
// @namespace   tarelessar
// @description Makes the signatures black again
// @include     https://*.gamefaqs.com/*
// @version     1
// @grant       none
// @run-at      document-start
// ==/UserScript==
//Makes signatures black I guess

var sheet = document.createElement ('style')
sheet.innerHTML = ".signature {color: inherit !important}";
document.head.appendChild(sheet);

编写此脚本是为了将网站上的灰色签名栏更改为黑色,并且一直适用于 Firefox 54 版本。之后,它停止了 56 版的工作。

当我解决它时,我发现 document.head 是空的。 通过一些研究,我发现 document.getElementsByTagName("head")[0]; 应该被使用并且尝试过:

// ==UserScript==
// @name        MakeSignaturesBlack
// @namespace   tarelessar
// @description Makes the signatures black again
// @include     https://*.gamefaqs.com/*
// @version     1
// @grant       none
// @run-at      document-start
// ==/UserScript==
//Makes signatures black I guess

var sheet = document.createElement ('style')
sheet.innerHTML = ".signature {color: inherit !important}";
document.head || document.getElementsByTagName("head")[0];.appendChild(sheet);

...它没有改变签名颜色。

我做错了什么?我如何更改 "head" 元素以更改签名颜色?

@run-at document-start 模式下,Greasemonkey 脚本确实可以在 document.head 可用之前触发。在这种情况下,退回到 documentElement.

这样的代码最好:

let D           = document;
let sheet       = D.createElement ('style')
sheet.innerHTML = ".signature {color: inherit !important}";
let targ        = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
targ.appendChild (sheet);

但是,如果您只是通过注入 CSS 来改变外观,那么使用 the Stylish extension 会更聪明。对于这种事情,它更容易并且表现更好。