現在のスクリプトスタイルの欠如は、実際には完全な惨事です:-(
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つであるため、ここで検討する価値があると考えました。
リンクされたバグで、「CSSを拡張機能にバンドルするとこれが機能するはずです...」が何を意味するのか正確にはわかりません。 動的ノード挿入が機能しない場合があります。
CSPセーフ機能を検討するために再開します。 (しかし、非常に低い優先度で...)
原則として、これは、メッセージをバックグラウンドスクリプトに渡し、tabs.insertCSSを実行することにより、FFを待たずに実装することもできます。 しかし、そのバグが実装されれば、それらのフープを飛び越える必要はありません。
@arantius 1415352は、「これは、HTML style
属性とHTML <style>
ノードのコンテンツの両方に適用されるはずです」と述べています。
ポリフィルについて: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
アタッチできます。
最も参考になるコメント
ありがとう !
しかし、それは現在の欠如をさらに理解できないものにします...