Panduan menulis
Skrip yang diterbitkan di sini dipasang di Browser Ikun. Kliennya mendekati pengelola userscript, tetapi bukan versi desktop yang lengkap. Periksa aturan di bawah sebelum menerbitkan agar pemasangan dan pembaruan tidak gagal.
Bahasa situs adalah direktori di URL, misalnya /zh-CN/, /zh-TW/, /ja/, /ko/, /id/, /en/. Daftar secara bawaan hanya menampilkan skrip bahasa itu. Alamat pemasangan /s/nomor.user.js tidak memakai direktori bahasa.
Menerbitkan
- Daftar dan masuk.
- Buka Terbitkan dan tempel sumber lengkap. Sumber harus punya header ==UserScript==.
- Untuk memperbarui, buka Terbitkan versi baru pada skrip itu dan tempel sumber baru. Jangan mengubah ID skrip, atau pengguna yang sudah memasang tidak menerima pembaruan.
Maksimal 50 skrip per orang. Setelah disembunyikan, tautan pemasangan mengembalikan 404 dan skrip hilang dari pencarian.
Skrip minimal
// ==UserScript==
// @name Skrip contoh
// @namespace https://scripts.ikunbrowser.com
// @version 1.0.0
// @description Menambah satu baris di halaman contoh
// @match https://example.com/*
// @grant none
// ==/UserScript==
(function () {
document.body.insertAdjacentHTML("beforeend", "<p>Skrip contoh sudah berjalan</p>");
})();
Metadata
Wajib punya @name, serta @match atau @include.
| Kolom | Keterangan |
|---|---|
@name | Nama tanpa akhiran bahasa yang dipakai. Jika hanya ada nama lokal seperti @name:zh-CN, yang pertama yang dipakai. |
@name:zh-CN @description:ja | Nama dan deskripsi per bahasa. Saat membuka direktori bahasa itu, teks ini yang dipakai. Jika tidak ada @name biasa, bahasa skrip mengikuti nama lokal pertama. |
@namespace @version @description | Sebaiknya ditulis. @description:xx hanya dipakai jika deskripsi bawaan tidak ada. |
@match | Pencocokan Chrome. Bisa memakai *://, *.example.com, <all_urls>. Halaman situs menampilkan skrip menurut domain pada aturan ini, misalnya /scripts/by-site/example.com. |
@include @exclude | Wildcard * ?, atau /regex/i. |
@exclude-match | Mengecualikan dengan aturan match. |
@run-at | document-start / document-end / document-body / document-idle. Jika kosong, dipakai idle. |
@noframes | Tidak berjalan di subframe. |
@grant | Izin yang tidak dikenal tidak menggagalkan pemasangan. Fungsi yang belum ada tetap ada, tetapi tidak melakukan apa-apa. |
@require @resource | Hanya http atau https. Masing-masing maksimal 8. data:, file:, dan jalur relatif gagal dipasang. |
@connect @icon @author | Diabaikan klien dan tidak memengaruhi pemasangan. |
Aturan match dan pengecualian masing-masing maksimal 64. Setiap @require maksimal 512KB, total sekitar 1MB. Setiap @resource maksimal 256KB.
Pembaruan
Klien tidak membandingkan versi semantik. @version baru, setelah spasi di ujung dihilangkan, harus berbeda dari string versi saat ini. Skrip diganti hanya saat pengguna memeriksa pembaruan secara manual. Dua versi yang kosong juga dianggap sama.
Saat mengirim /s/{id}.user.js, situs ini menyisipkan @downloadURL dan @updateURL di awal blok metadata, keduanya menunjuk ke URL itu. Klien hanya membaca entri pertama, jadi URL pembaruan yang Anda tulis di belakang tidak dipakai. Jangan mengarahkan @updateURL ke .meta.js. Klien melewatkan URL seperti itu.
Browser tidak memperbarui di latar belakang. Pengguna memeriksa manual di Pengaturan → Skrip pengguna.
Tautan pemasangan
Tombol Pasang di halaman detail adalah tautan .user.js biasa. Browser Ikun mencegat URL http(s) apa pun yang berakhiran .user.js dan menampilkan konfirmasi. Tidak perlu protokol khusus.
Alamat gaya Greasy Fork juga didukung: /scripts/nomor.user.js, /scripts/nomor.meta.js, /scripts/nomor/code/nama.user.js, halaman /scripts/nomor-nama, dan /scripts/nomor.json. URL pembaruan untuk Browser Ikun tetap /s/nomor.user.js.
Skrip yang sama, hari yang sama, dan IP yang sama dihitung satu kali pemasangan.
API yang tersedia di klien
GM_* sinkron dan GM.* versi Promise sama-sama disuntikkan. Skrip berjalan di konteks halaman. unsafeWindow adalah window halaman. Tidak ada sandbox terpisah.
| API | Perilaku |
|---|---|
GM_addStyle GM_addElement | Menyisipkan gaya atau elemen. |
GM_getValue | Disimpan lokal dan terpisah per skrip. Satu nilai maksimal 32KB. Pemantau perubahan hanya di halaman saat ini, tidak lintas tab. |
GM_xmlhttpRequest | Mendukung metode umum serta arraybuffer / blob. Isi permintaan maksimal 256KB, respons maksimal 1MB. Hanya http(s) internet publik. Alamat lokal ditolak. Tidak lewat JS halaman dan tidak lewat proksi browser. |
GM_setClipboard GM_download GM_openInTab | Papan klip, konfirmasi unduhan di aplikasi, dan membuka http(s) di tab baru. |
GM_getResourceText GM_getResourceURL | Membaca sumber daya yang di-cache saat pemasangan. |
GM_registerMenuCommand | Jika halaman saat ini mendaftarkan perintah, bilah bawah menampilkan Perintah skrip. |
GM_notification | Hanya menampilkan pemberitahuan, tanpa callback klik. |
GM_getTab | Hanya objek memori di proses skrip saat ini, bukan multi-jendela. |
Yang berikut tetap bisa dipasang meski ada @grant, tetapi fungsinya tidak melakukan apa-apa: GM_cookie, GM_webRequest, dan izin lain yang tidak ada di tabel. Jangan bergantung pada mengubah permintaan atau membaca/menulis cookie.
Hal yang perlu diingat saat berjalan
- Sumber maksimal 512KB. Skrip terpasang maksimal 64.
- Jika CSP halaman melarang unsafe-eval, skrip gagal tanpa pesan.
- Saat aplikasi satu halaman berganti URL, skrip yang baru cocok dan belum berjalan akan dijalankan. Yang sudah berjalan tidak diulang.
- document-start lebih lengkap di tab yang baru dibuka. Halaman yang sedang terbuka tepat setelah pemasangan bisa melewatkan awal dokumen yang sebenarnya.
- Beranda dan about: tidak disuntik. Galat skrip ditelan, dan halaman tidak menampilkan log jalannya seperti pengelola userscript.
Skrip seperti apa yang cocok
Cocok untuk mengubah DOM, menambah gaya, menyimpan sedikit pengaturan, sesekali meminta, papan klip, mengunduh berkas, sakelar lewat menu, dan @require seperti jQuery.
Tidak cocok jika sangat bergantung pada cookie, mencegat jaringan, harus tepat di awal dokumen, CSP halaman ketat, atau skrip dan dependensinya sangat besar.