Greasemonkey: Tambahkan GM.addStyle API, untuk menata halaman yang membatasi CSP

Dibuat pada 22 Nov 2017  ·  14Komentar  ·  Sumber: greasemonkey/greasemonkey

kurangnya gaya skrip saat ini sebenarnya benar-benar bencana :-(

Komentar yang paling membantu

Terima kasih !

Namun itu membuat kekurangan saat ini semakin tidak bisa dipahami ...

Semua 14 komentar

addStyle hanyalah 12 baris kode sepele , yang dapat Anda salin dengan mudah ke skrip Anda. Atau bahkan 11, karena baris ini tidak diperlukan:
style.setAttribute('type', 'text/css');

Terima kasih !

Namun itu membuat kekurangan saat ini semakin tidak bisa dipahami ...

@arantius Saya punya masalah dengan mencoba memuat gaya pengguna pada halaman yang memiliki CSP dan tidak mengizinkan "diri" sebagai Asal - jadi saya tidak bisa hanya menambahkan elemen <style> . GM dapat menyelesaikan ini dengan mengekspos API yang memanggil tabs.insertCSS() ( ref ). Pikiran?

Saya memiliki masalah dengan mencoba memuat gaya pengguna pada halaman yang memiliki CSP dan tidak mengizinkan "diri" sebagai asal -- jadi saya tidak bisa menambahkan a

Saya mengajukan bug terhadap Stylish karena di situlah saya mengalami masalah. Namun, mungkin perlu dipertimbangkan di sini karena API GM saat ini sebagian besar mengekspos API WebExt istimewa yang menghindari beberapa pembatasan skrip konten atau lainnya, dan insertCSS adalah salah satunya.

Menemukan bug yang dirujuk @Sxderp (juga yang ini ). Ketika itu mendarat, saran saya di sini dan di Stylish tidak akan diperlukan.

Saya tidak tahu persis apa artinya "Ini akan berfungsi jika Anda menggabungkan CSS di ekstensi Anda ...", dalam bug yang ditautkan. Penyisipan simpul dinamis mungkin tidak berfungsi.

Saya akan membuka kembali untuk mempertimbangkan fungsionalitas CSP-safe. (Tapi dengan prioritas yang sangat rendah...)

Pada prinsipnya ini juga dapat diimplementasikan tanpa menunggu FF dengan melewatkan pesan ke skrip latar belakang dan menjalankan tabs.insertCSS . Tetapi melompati rintangan itu tidak akan diperlukan setelah bug itu diimplementasikan.

@arantius 1415352 mengatakan "Ini harus berlaku untuk atribut HTML style dan konten HTML <style> node."

Jika tidak ada rencana untuk menambahkan GM.addStyle (yang sangat baik bagi saya jika masalah CSP diatasi sebaliknya), saya sarankan mengubah posting blog ini untuk memperjelas bahwa tidak hanya “Mulai hari ini, ada tidak ada dukungan untuk […] GM_addStyle”, tetapi tidak ada yang direncanakan di masa mendatang juga (dan mungkin menunjuk ke alternatif ini juga). Itu mungkin tampak jelas, tetapi itu bukan untuk saya (jika saya tidak menemukan masalah ini, saya mungkin menunggu fitur tersebut diimplementasikan kembali alih-alih memperbaiki skrip saya sekarang).

Terima kasih!

Mengenai polyfill: sejak saya mendengar bahwa GM_addStyle ada di blok pemotong, saya sebenarnya hanya menggunakan 3 perintah untuk menggantinya. Daripada menguji HEAD, saya hanya menambahkan STYLE langsung ke documentElement, yang selalu ada, bahkan saat document-start.

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

Inilah versi fungsi yang lebih jarang saya gunakan, yang masuk pada 5 baris:

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

Saya sudah menguji ini di GM 3 dan 4 di Firefox, dan TamperMonkey di Chrome, tanpa masalah, meskipun tidak standar. Dan saya lebih suka tidak standar daripada gagal jika HEAD belum dimuat (yang sering terjadi secara mengejutkan. Saya punya keluhan.)

Saya juga mencatat bahwa UserStyles,org menggunakan metode saya sebagai cadangan dalam skrip pengguna yang dibuat secara otomatis.

Daripada menguji HEAD, saya hanya menambahkan STYLE langsung ke documentElement, yang selalu ada, bahkan saat document-start.

Di FF57 dan GM4, documentElement tidak selalu tersedia saat memulai dokumen, setidaknya di mesin saya.

Karena GM 4 (untuk saat ini) memulai dokumen lebih lambat dari sebelumnya, saya
tidak yakin bagaimana itu mungkin. Tetapi jika documentElement tidak ada,
maka keduanya tidak akan menjadi elemen HEAD, karena documentElement adalah
elemen HTML. yang mengandung elemen HEAD. Jadi metode saya tidak
lebih buruk.

Saya akui saya belum menguji dev terbaru di Fx 59, yang menggunakan yang berbeda
metode untuk memulai dokumen, tetapi saya harap documentElement ada. Jika
tidak, maka segala macam skrip akan rusak. Anda tidak dapat melakukan apa pun pada
document sebelum ada documentElement. Saya bahkan tidak berpikir Anda dapat mengatur
up pengamat mutasi.

Saya pasti mengharapkan elemen dokumen ada pada titik ketika
skrip konten apa pun disuntikkan.

Pada Selasa, 26 Desember 2017 pukul 18:26, CoolCmd [email protected] menulis:

Daripada menguji HEAD, saya hanya menambahkan STYLE langsung ke
documentElement, yang selalu ada, bahkan saat document-start.
Di FF57 dan GM4, documentElement tidak selalu tersedia di
document-start, setidaknya di mesin saya.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/greasemonkey/greasemonkey/issues/2724#issuecomment-354028964 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AFNSrmb5eKj-nY9vnR3d94bq5kIjaz9Tks5tEY7PgaJpZM4QnG03
.

Saya bahkan tidak berpikir Anda dapat mengatur pengamat mutasi.

Anda dapat melampirkan pengamat mutasi ke document .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat