我的头部在哪里?

时间:2017-10-28 14:46:56

标签: javascript html greasemonkey

在使用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"元素,以便它改变签名颜色?

1 个答案:

答案 0 :(得分:1)

@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会更聪明。对于这种事情来说,它更容易并且表现更好。