色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

TamperMonkey中的GM_addStyle等效項

張吉惟2年前8瀏覽0評論

有沒有與GreaseMonkey的GM_addStyle方法等價的添加CSS的TamperMonkey?

在GreaseMonkey中,您可以向多個元素添加一組CSS屬性,如下所示:

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

為了在TamperMonkey做同樣的事情,我目前必須做以下事情:

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; }');

這是可行的,但是是否有一個內置的GM_addStyle等價于TamperMonkey,使我不必在每個腳本中重復這個操作?

您需要創建自己的GM_addStyle函數,如下所示:

// ==UserScript==
// @name           Example
// @description    Usercript with GM_addStyle method.
// ==/UserScript==

function GM_addStyle(css) {
  const style = document.getElementById("GM_addStyleBy8626") || (function() {
    const style = document.createElement('style');
    style.type = 'text/css';
    style.id = "GM_addStyleBy8626";
    document.head.appendChild(style);
    return style;
  })();
  const sheet = style.sheet;
  sheet.insertRule(css, (sheet.rules || sheet.cssRules || []).length);
}

//demo :
GM_addStyle("p { color:red; }");
GM_addStyle("p { text-decoration:underline; }");

document.body.innerHTML = "<p>I used GM_addStyle.</p><pre></pre>";

const sheet = document.getElementById("GM_addStyleBy8626").sheet,
  rules = (sheet.rules || sheet.cssRules);

for (let i=0; i<rules.length; i++)
  document.querySelector("pre").innerHTML += rules[i].cssText + "\n";

根據TamperMonkey文檔,它像GreaseMonkey一樣直接支持GM_addStyle。檢查您的包含/匹配規則是否正確,然后將此演示代碼添加到您的用戶腳本的頂部:

// ...
// @grant        GM_addStyle
// ==/UserScript==

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

我剛剛在Chrome 35中的一個新用戶腳本上測試了它,它像預期的那樣工作。如果您有任何其他@grant規則,您將需要為這個函數添加一個,否則它應該會被自動檢測和授予。

如果有人感興趣,我改了代碼,這樣你就不用寫“!重要的”在每一個css規則之后。當然這只在你使用函數而不是GM_addStyle的情況下才有效。

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);
}

此“add global style(' body { color:white;背景色:黑色;}');",

將“體{色:白!重要;背景色:黑色!重要;}');"

我也有同樣的問題。我嘗試了所有的修復,確保頭中有// @grant GM_addStyle。我的問題是,我在標題的底部還有默認代碼的// @grant none。去掉那塊,現在我所有的css作品。希望這也能幫助其他陷入困境的人。

我關于這個話題的2美分,覺得有人可能會感興趣,我修改了PaarCrafter的回答,允許多行不帶括號:

用法:

addGlobalStyle`
    button.special {
        position: relative;
        top: -3em;
    }
`

// string templating ('Template literals') works anyways
addGlobalStyle(`p {
  color: red;
}`)

// Still works
addGlobalStyle('p {color: red;}')

修改版本:

function addGlobalStyle(css = '') {
    let target = document.head || document.body;
    let style = document.createElement('style');
    
    style.type = 'text/css';
    style.innerHTML = (css || arguments.length ? arguments[0][0] : '').replaceAll(';', ' !important;');
    target.append(style);
}

我有在各種引擎中運行的GreaseMonkey腳本,這涵蓋了所有種類:

--snip--
// @include      *.someplace.com/*
// @grant        GM_addStyle
// ==/UserScript==

(function() {
  'use strict';

let myCSS=(<><![CDATA[
body { background: #121212 url(https://somewhere.github.io/boss/imgs/bg.jpg) top left repeat !important; }
]]></>).toString();

// workaround for various GreaseMonkey engines
if (typeof GM_addStyle != "undefined") {
    GM_addStyle(myCSS);
} else if (typeof PRO_addStyle != "undefined") {
    PRO_addStyle(myCSS);
} else if (typeof addStyle != "undefined") {
    addStyle(myCSS);
} else {
    var node = document.createElement("style");
    node.type = "text/css";
    node.appendChild(document.createTextNode(myCSS));
    var heads = document.getElementsByTagName("head");
    if (heads.length > 0) {
        heads[0].appendChild(node);
    } else {
        // no head yet, stick it whereever
        document.documentElement.appendChild(node);
    }
}

這是2018年寫的一個劇本的摘錄,已知該劇本在GreasMonkey、TamperMonkey和ViolentMonkey(可能還有其他人)中有效。采用上面提到的addGlobalStyle(css)函數,你應該可以去任何地方。

這是https://userstyles.org使用的解決方案,例如當你點擊鏈接& quot作為用戶腳本安裝樣式& quot在https://user styles . org/styles/23516/midnight-surfing-global-dark-style這樣的樣式頁面上:

if (typeof GM_addStyle != "undefined") {
    GM_addStyle(css);
} else if (typeof PRO_addStyle != "undefined") {
    PRO_addStyle(css);
} else if (typeof addStyle != "undefined") {
    addStyle(css);
} else {
    var node = document.createElement("style");
    node.type = "text/css";
    node.appendChild(document.createTextNode(css));
    var heads = document.getElementsByTagName("head");
    if (heads.length > 0) {
        heads[0].appendChild(node);
    } else {
        // no head yet, stick it whereever
        document.documentElement.appendChild(node);
    }
}

注意:代碼將在Greasemonkey 4以及類似的插件上工作。我不使用非開源的Tampermonkey,但這個答案可能會幫助其他用戶找到這個問題。在使用純JavaScript解決方案之前,它會嘗試使用不同插件的幾個內置函數。您可能只需要else塊中的代碼。

& quot如果& quot如果您確定頁面有head標記,并且您可以改為像這樣將節點添加到head,則可能不需要檢查head標記長度:document . head . appendchild(node);。然而,我注意到有時會有一個JavaScript錯誤,根據使用的方法,標題是未定義的或空的,例如在facebook.com上注銷時(至少在使用// @run-at document-start時,這是深色主題避免閃爍所必需的)。因此,在這種情況下,檢查長度會很有用。

如果您想要使用多行css代碼,可以創建帶有反斜線的CSS變量,如下所示:

var css = `
CODE HERE
`;

更新:我剛剛看到這個解決方案也在另一個答案中使用,但沒有提到來源。但是,您可能會看到控制臺錯誤document.docum entElement為空,但可以通過一個變通的Observer解決:https://github . com/grease monkey/grease monkey/issues/2996 # issue comment-906608348。