首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GM_addStyle等价于TamperMonkey

GM_addStyle等价于TamperMonkey
EN

Stack Overflow用户
提问于 2014-05-15 16:06:34
回答 6查看 54.3K关注 0票数 46

是否有一个与GreaseMonkey的TamperMonkey方法等价的GM_addStyle方法来添加CSS?

在GreaseMonkey中,您可以向多个元素添加一组CSS属性,如下所示:

代码语言:javascript
复制
GM_addStyle("body { color: white; background-color: black; } img { border: 0; }");

要在TamperMonkey中执行等效的操作,我目前必须执行以下操作:

代码语言:javascript
复制
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,这样我就不必在每个脚本上重复这个了?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-05-15 16:46:04

根据the TamperMonkey documentation的说法,它直接支持GM_addStyle,就像GreaseMonkey一样。检查包含/匹配规则是否正确,然后将此演示代码添加到用户脚本的顶部:

代码语言:javascript
复制
GM_addStyle('* { font-size: 99px !important; }');
console.log('ran');

我刚刚在Chrome 35中的一个新的用户脚本上测试了它,它像预期的那样工作。如果您有任何其他 rule,您将需要为该函数添加一个,否则它将被检测并自动授予。

票数 51
EN

Stack Overflow用户

发布于 2015-10-16 18:03:49

4.0或+版本,2018年更新

代码语言:javascript
复制
ReferenceError: GM_addStyle is not defined

您需要创建自己的GM_addStyle函数,如下所示:

代码语言:javascript
复制
// ==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";

弃用

如果GM_addStyle(...)不能工作,请检查是否有@grant GM_addStyle头。

像这样的 :

代码语言:javascript
复制
// ==UserScript==
// @name           Example
// @description    See usercript with grant header.
// @grant          GM_addStyle
// ==/UserScript==

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

Stack Overflow用户

发布于 2017-09-18 18:07:39

如果有人被插入,我更改了代码,这样你就不必在每个css规则之后写“!重要”了。当然,只有当您使用函数而不是GM_addStyle时,这才有效。

代码语言:javascript
复制
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);
}

这个"addGlobalStyle('body { color: white; background-color: black; }');“的输出

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23683439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档