2014-05-15 11 views
11

Gibt es ein TamperMonkey-Äquivalent zu GreaseMonkey GM_addStyle Methode für das Hinzufügen von CSS?GM_addStyle Entsprechung in TamperMonkey

In Greasemonkey, Sie eine Reihe von CSS-Eigenschaften, um mehrere Elemente wie so hinzufügen:

GM_addStyle("body { color: white; background-color: black; } img { border: 0; }"); 

das Äquivalent in TamperMonkey zu tun, habe ich zur Zeit folgendes zu tun:

function addGlobalStyle(css) { 
    var head, style; 
    head = document.getElementsByTagName('head')[0]; 
    if (!head) { return; } 
    style = document.createElement('style'); 
    style.type = 'text/css'; 
    style.innerHTML = css; 
    head.appendChild(style); 
} 

addGlobalStyle('body { color: white; background-color: black; }'); 

Das funktioniert, aber gibt es eine eingebaute GM_addStyle Entsprechung für TamperMonkey, die mich davon abhält, das auf jedem Skript zu wiederholen?

Antwort

18

Gemäß the TamperMonkey documentation unterstützt es direkt GM_addStyle, wie GreaseMonkey. Überprüfen Sie Ihre include/Einstimmungsregeln korrekt sind, dann fügen Sie diese Demo Code am Anfang Ihres userscript:

GM_addStyle('* { font-size: 99px !important; }'); 
console.log('ran'); 

Getestet habe ich es nur auf einem frischen userscript in Chrome 35 und es funktionierte wie erwartet. Wenn Sie eine andere @grant rule haben, müssen Sie eine für diese Funktion hinzufügen, andernfalls sollte sie automatisch erkannt und gewährt werden.

+0

Heh, dachte ich nicht, etwas scheinbar unwahrscheinlich wie das testen .. mit seinem 'GM_' Präfix. Sie sollten an einem besseren PageRank dieser Dokumentation arbeiten. Derzeit unsichtbar unter https://www.google.com/search?q=tampermonkey+gm_addstyle - Danke! – arserbin3

+1

Das scheint nicht zu funktionieren, ich bekomme 'ERROR: Ausführung des Skripts fehlgeschlagen! GM_addStyle ist nicht definiert Nachrichten in der Konsole. – Husky

+3

@Husky erinnern Sie sich, dass Sie die Funktion wie in der Antwort beschrieben gewähren müssen (ich würde mich nicht auf die automatische Erkennung verlassen), und offensichtlich wird jeder Code, den Sie in den Seitenkontext injizieren, nicht auf die GM-Funktionen zugreifen können. Ich habe gerade wie oben getestet und die Funktion scheint immer noch gut zu funktionieren. – lpd

46

Wenn GM_addStyle(...) nicht funktioniert, überprüfen Sie, ob Sie @grant GM_addStyle Header haben.

So:

// ==UserScript== 
// @name   Example 
// @description See usercript with grant header. 
// @grant   GM_addStyle 
// ==/UserScript== 

GM_addStyle("body { color: white; background-color: black; } img { border: 0; }"); 
2

Wenn jemand interessiert ist, änderte ich den Code so müssen Sie nach jeder CSS-Regel nicht schreiben „wichtig“. Das funktioniert natürlich nur, wenn Sie die Funktion anstelle von GM_addStyle verwenden.

function addGlobalStyle(css) { 
    var head, style; 
    head = document.getElementsByTagName('head')[0]; 
    if (!head) { return; } 
    style = document.createElement('style'); 
    style.type = 'text/css'; 
    style.innerHTML = css.replace(/;/g, ' !important;'); 
    head.appendChild(style); 
} 

Der Ausgang dieses "addGlobalStyle('body { color: white; background-color: black; }');",

wird "body { color: white !important; background-color: black !important; }');"