Skrip Ikun

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

  1. Daftar dan masuk.
  2. Buka Terbitkan dan tempel sumber lengkap. Sumber harus punya header ==UserScript==.
  3. 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.

KolomKeterangan
@nameNama tanpa akhiran bahasa yang dipakai. Jika hanya ada nama lokal seperti @name:zh-CN, yang pertama yang dipakai.
@name:zh-CN @description:jaNama 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 @descriptionSebaiknya ditulis. @description:xx hanya dipakai jika deskripsi bawaan tidak ada.
@matchPencocokan Chrome. Bisa memakai *://, *.example.com, <all_urls>. Halaman situs menampilkan skrip menurut domain pada aturan ini, misalnya /scripts/by-site/example.com.
@include @excludeWildcard * ?, atau /regex/i.
@exclude-matchMengecualikan dengan aturan match.
@run-atdocument-start / document-end / document-body / document-idle. Jika kosong, dipakai idle.
@noframesTidak berjalan di subframe.
@grantIzin yang tidak dikenal tidak menggagalkan pemasangan. Fungsi yang belum ada tetap ada, tetapi tidak melakukan apa-apa.
@require @resourceHanya http atau https. Masing-masing maksimal 8. data:, file:, dan jalur relatif gagal dipasang.
@connect @icon @authorDiabaikan 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.

APIPerilaku
GM_addStyle GM_addElementMenyisipkan gaya atau elemen.
GM_getValueDisimpan lokal dan terpisah per skrip. Satu nilai maksimal 32KB. Pemantau perubahan hanya di halaman saat ini, tidak lintas tab.
GM_xmlhttpRequestMendukung 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_openInTabPapan klip, konfirmasi unduhan di aplikasi, dan membuka http(s) di tab baru.
GM_getResourceText GM_getResourceURLMembaca sumber daya yang di-cache saat pemasangan.
GM_registerMenuCommandJika halaman saat ini mendaftarkan perintah, bilah bawah menampilkan Perintah skrip.
GM_notificationHanya menampilkan pemberitahuan, tanpa callback klik.
GM_getTabHanya 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

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.