Greasemonkey: 添加 GM.addStyle API,用于设置 CSP 限制页面的样式

创建于 2017-11-22  ·  14评论  ·  资料来源: greasemonkey/greasemonkey

当前缺乏脚本风格实际上是一场彻底的灾难:-(

最有用的评论

谢谢 !

然而,这让当前的缺乏更加难以理解......

所有14条评论

addStyle只是12 行简单的代码,您可以轻松地将其复制粘贴到您的脚本中。 甚至是 11,因为不需要这一行:
style.setAttribute('type', 'text/css');

谢谢 !

然而,这让当前的缺乏更加难以理解......

@arantius我在尝试在具有 CSP 且不允许“self”作为来源的页面上加载用户样式时遇到问题——所以我不能只添加<style>元素。 GM 可以通过公开一个调用tabs.insertCSS() ( ref ) 的 API 来解决这个问题。 想法?

我在尝试在具有 CSP 且不允许“self”作为源的页面上加载用户样式时遇到问题——所以我不能只添加一个

我向 Stylish 提交了一个错误,因为那是我遇到问题的地方。 尽管如此,认为这里可能值得考虑,因为 GM 的当前 API 主要公开了绕过某些内容脚本限制或其他的特权 WebExt API,而 insertCSS 是其中之一。

找到了@Sxderp提到的错误(也是这个)。 当这些登陆时,我在这里和关于时尚的建议将是不必要的。

在链接的错误中,我不知道“如果将 CSS 捆绑在扩展程序中,这应该可以工作......”的确切含义。 动态节点插入可能不起作用。

我将重新考虑 CSP 安全功能。 (但在一个非常低的优先级......)

原则上,这也可以通过将消息传递给后台脚本并运行tabs.insertCSS来实现,而无需等待 FF。 但是一旦实现了该错误,就没有必要跳过这些障碍。

@arantius 1415352说“这应该适用于 HTML style属性和 HTML <style>节点的内容。”

如果没有计划添加GM.addStyle (如果 CSP 问题得到解决,对我来说非常好),我建议修改这个替代方案)。 这似乎很明显,但它不适合我(如果我没有发现这个问题,我可能正在等待重新实现该功能而不是立即修复我的脚本)。

谢谢!

关于 polyfill:自从我听说 GM_addStyle 在砧板上,我实际上只用了 3 个命令来替换它。 我没有测试 HEAD,而是将 STYLE 直接添加到 documentElement,它始终存在,即使在文档开始时也是如此。

var style = document.createElement('style'); var style.textContent = `
<Stylesheet here>
`; document.documentElement.appendChild(style);

这是我很少使用的函数版本,它有 5 行:

addStyle = function (css) {
  var style = document.createElement('style');
  style.textContent = css;
  document.documentElement.appendChild(style);
  return style; //optional, but convenient for changing the styling later.
};

我已经在 Firefox 上的 GM 3 和 4 以及 Chrome 上的 TamperMonkey 中测试过这个,没有问题,尽管不是标准的。 如果 HEAD 还没有加载,我更喜欢非标准而不是让它失败(这种情况经常发生。我有抱怨。)

我还注意到 UserStyles,org 在其自动生成的用户脚本中使用我的方法作为后备。

我没有测试 HEAD,而是将 STYLE 直接添加到 documentElement,它始终存在,即使在文档开始时也是如此。

在 FF57 和 GM4 中,documentElement 在文档启动时并不总是可用,至少在我的机器上是这样。

由于 GM 4(目前)的文档启动发生得比以前更晚,我
不知道这怎么可能。 但是如果 documentElement 不存在,
那么两者都不是 HEAD 元素,因为 documentElement 是
HTML 元素。 这是包含 HEAD 元素的内容。 所以我的方法不是
更糟。

我承认我没有在 Fx 59 上测试过最新的开发,它使用了不同的
获取文档启动的方法,但我希望 documentElement 存在。 如果
不,那么各种脚本都会中断。 你不能对
文档之前有一个文档元素。 我什至不认为你可以设置
突变观察者。

我肯定希望文档元素存在于
注入任何内容脚本。

在星期二,2017年12月26日在下午6时26分,CoolCmd [email protected]写道:

我没有测试 HEAD,而是直接将 STYLE 添加到
documentElement,它始终存在,即使在文档开始时也是如此。
在 FF57 和 GM4 中,documentElement并不总是在
文档启动,至少在我的机器上。


您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/greasemonkey/greasemonkey/issues/2724#issuecomment-354028964
或静音线程
https://github.com/notifications/unsubscribe-auth/AFNSrmb5eKj-nY9vnR3d94bq5kIjaz9Tks5tEY7PgaJpZM4QnG03
.

我什至不认为你可以设置突变观察者。

您可以将变异观察者附加到document

此页面是否有帮助?
0 / 5 - 0 等级