Greasemonkey: CSP制限のあるページをスタイリングするためのGM.addStyleAPIを追加します

作成日 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があり、オリジンとして「自己」を許可しないページにユーザースタイルを読み込もうとすると問題が発生するため、単に追加することはできません。

問題が発生したので、Stylishに対してバグを報告しました。 それでも、GMの現在のAPIは、コンテンツスクリプトの制限などを回避する特権WebExt APIをほとんど公開しており、insertCSSもその1つであるため、ここで検討する価値があると考えました。

@Sxderpが参照しているバグを見つけました(これも)。 それらが着陸したとき、こことスタイリッシュに関する私の提案は不要になります。

リンクされたバグで、「CSSを拡張機能にバンドルするとこれが機能するはずです...」が何を意味するのか正確にはわかりません。 動的ノード挿入が機能しない場合があります。

CSPセーフ機能を検討するために再開します。 (しかし、非常に低い優先度で...)

原則として、これは、メッセージをバックグラウンドスクリプトに渡し、tabs.insertCSSを実行することにより、FFを待たずに実装することもできます。 しかし、そのバグが実装されれば、それらのフープを飛び越える必要はありません。

@arantius 1415352は、「これは、HTML style属性とHTML <style>ノードのコンテンツの両方に適用されるはずです」と述べています。

GM.addStyleを追加する予定がない場合(CSPの問題が別の方法で対処されている場合は非常に問題ありません)、このブログ投稿を修正して、「今日の時点で、 […] GM_addStyleのサポートはありませんが、将来的にもサポートされる予定はありません(おそらく、この代替案も指すでしょう)。 それは当たり前のように思えるかもしれませんが、私にとってはそうではありませんでした(この問題が見つからなかった場合は、スクリプトを修正する代わりに、機能が再実装されるのを待っている可能性があります)。

ありがとう!

ポリフィルについて: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のGM3と4、およびChromeのTamperMonkeyで問題なくテストしましたが、標準ではありません。 そして、HEADがまだロードされていない場合に失敗するよりも、非標準の方が好きです(これは、驚くほど頻繁に発生します。苦情がありました)。

また、UserStyles、orgは、自動生成されたユーザースクリプトのフォールバックとして私のメソッドを使用していることにも注意してください。

HEADをテストするのではなく、STYLEをdocumentElementに直接追加します。これは、ドキュメントの開始時でも常に存在します。

FF57およびGM4では、少なくとも私のマシンでは、documentElementがドキュメントの開始時に常に使用できると限り

GM 4(今のところ)ではドキュメントの開始が以前よりも遅くなっているので、私は
それがどのように可能かわからない。 ただし、documentElementが存在しない場合は、
documentElementは
HTML要素。 これはHEAD要素を含むものです。 だから私の方法はそうではありません
さらに悪いことに。

私はFx59で最新の開発をテストしていないことを認めます。
document-startを取得するメソッドですが、documentElementが存在することを願っています。 もしも
そうでなければ、あらゆる種類のスクリプトが壊れます。 あなたは何もすることはできません
documentElementが存在する前のドキュメント。 私はあなたが設定できるとは思わない
突然変異オブザーバーをアップします。

私は間違いなくドキュメント要素がその時点で存在することを期待します
コンテンツスクリプトが挿入されます。

18:26で火、2017年12月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 評価