作成ガイド
ここで公開したスクリプトは坤坤ブラウザにインストールします。クライアントは油猴に近いですが、デスクトップ版そのものではありません。公開前に次の規則を確認すると、インストール失敗や更新されない事態を減らせます。
サイトの言語は URL のディレクトリです。例:/zh-CN/、/zh-TW/、/ja/、/ko/、/id/、/en/。一覧は既定でその言語のスクリプトだけです。インストール URL /s/番号.user.js に言語ディレクトリは付きません。
公開
- 登録してログインします。
- 「公開」を開き、完全なソースを貼ります。ソースには ==UserScript== ヘッダーが必要です。
- 更新するときはそのスクリプトの「新しいバージョンを公開」を開き、新しいソースを貼ります。スクリプト ID は変えないでください。変えるとインストール済みのユーザーに更新が届きません。
1 人 50 件までです。非公開にするとインストールリンクは 404 になり、検索にも出ません。
最小限のスクリプト
// ==UserScript==
// @name サンプルスクリプト
// @namespace https://scripts.ikunbrowser.com
// @version 1.0.0
// @description サンプルページに一文を足す
// @match https://example.com/*
// @grant none
// ==/UserScript==
(function () {
document.body.insertAdjacentHTML("beforeend", "<p>サンプルが動きました</p>");
})();
メタデータ
少なくとも @name と、@match または @include が必要です。
| フィールド | 説明 |
|---|---|
@name | 言語サフィックスのない名前を優先します。@name:zh-CN のようなローカライズ名しかないときは最初の1件を使います。 |
@name:zh-CN @description:ja | 言語付きの名前と説明です。対応するディレクトリではそれを優先します。単独の @name がないときは、最初のローカライズ名でスクリプトの言語を決めます。 |
@namespace @version @description | 書くことを勧めます。@description:xx は既定の説明がないときだけ使われます。 |
@match | Chrome のマッチです。*://、*.example.com、<all_urls> が使えます。 サイトページはこれらの規則のドメインでスクリプトを一覧します。URL は /scripts/by-site/example.com のような形です。 |
@include @exclude | ワイルドカード * ?、または /正規表現/i。 |
@exclude-match | match 規則で除外します。 |
@run-at | document-start / document-end / document-body / document-idle。省略すると idle です。 |
@noframes | 子フレームでは動きません。 |
@grant | 未知の権限でもインストールは失敗しません。未実装の関数はありますが、何もしません。 |
@require @resource | http または https のみ。それぞれ最大 8 個です。data:、file:、相対パスはインストールに失敗します。 |
@connect @icon @author | クライアントは無視し、インストールには影響しません。 |
マッチと除外はそれぞれ最大 64 件です。@require は 1 件 512KB 以下、合計約 1MB。@resource は 1 件 256KB 以下です。
更新
クライアントはセマンティックバージョン比較をしません。新しい @version は前後の空白を除いた文字列が現在と違う必要があります。ユーザーが手動で更新確認したときだけ入れ替わります。両方空でも同じとみなします。
/s/{id}.user.js を配信するとき、このサイトはメタデータブロックの先頭に @downloadURL と @updateURL を挿入し、どちらもその URL を指します。クライアントは最初の1件だけを見るので、後ろに書いた更新 URL は頼りになりません。@updateURL を .meta.js にしないでください。クライアントはその URL を飛ばします。
ブラウザはバックグラウンドで自動更新しません。ユーザーは「設定 → ユーザースクリプト」で手動確認します。
インストールリンク
詳細ページの「インストール」は普通の .user.js リンクです。坤坤ブラウザは .user.js で終わる http(s) URL を横取りして確認を出します。特別なプロトコルは不要です。
Greasy Fork と同じアドレスにも対応します。/scripts/番号.user.js、/scripts/番号.meta.js、/scripts/番号/code/名前.user.js、/scripts/番号-名前 の詳細、/scripts/番号.json です。坤坤ブラウザへの更新 URL は引き続き /s/番号.user.js です。
同じスクリプト、同じ日、同じ IP ではインストールは 1 回だけ数えます。
クライアントで使える API
同期の GM_* と Promise 版の GM.* の両方が注入されます。スクリプトはページのコンテキストで動き、unsafeWindow はページの window そのものです。独立したサンドボックスはありません。
| API | 動作 |
|---|---|
GM_addStyle GM_addElement | スタイルまたは要素を挿入します。 |
GM_getValue | スクリプトごとに分離してローカルに保存します。1 つの値は最大 32KB です。変更監視は現在のページだけで、タブをまたぎません。 |
GM_xmlhttpRequest | 一般的なメソッドと arraybuffer / blob に対応します。リクエスト本文は最大 256KB、レスポンスは最大 1MB です。公開インターネットの http(s) のみで、ローカルアドレスは拒否されます。ページ JS もブラウザプロキシも通りません。 |
GM_setClipboard GM_download GM_openInTab | クリップボード、アプリ内のダウンロード確認、新しいタブで http(s) を開きます。 |
GM_getResourceText GM_getResourceURL | インストール時にキャッシュしたリソースを読みます。 |
GM_registerMenuCommand | 現在のページでコマンドを登録すると、下部バーに「スクリプトコマンド」が出ます。 |
GM_notification | 通知を表示するだけで、クリックのコールバックはありません。 |
GM_getTab | 現在のスクリプトプロセス内のメモリオブジェクトだけで、複数ウィンドウではありません。 |
次のものは @grant を書いてもインストールできますが、関数は何もしません。GM_cookie、GM_webRequest、および上の表にない権限です。リクエストの改変や Cookie の読み書きに依存しないでください。
実行時の注意
- ソースは 512KB 以下。インストール済みスクリプトは最大 64 件です。
- ページの CSP が unsafe-eval を禁じていると、スクリプトは何も言わず失敗します。
- SPA で URL が変わったとき、新しく一致し、まだ実行していないスクリプトは実行されます。実行済みのものは再実行しません。
- document-start が完全に効くのは新しく開いたタブです。インストール直後の現在のページでは、本当の文書先頭に間に合わないことがあります。
- ホームページと about: には注入しません。スクリプトのエラーは握りつぶされ、油猴のような実行ログはページに出ません。
向いているスクリプト
DOM の変更、スタイル追加、少量の設定保存、たまにリクエスト、クリップボード、ファイルのダウンロード、メニューでの切り替え、jQuery のような @require に向いています。
Cookie への強い依存、通信の横取り、文書の本当の先頭への厳密な依存、厳しい CSP、非常に大きいスクリプトや依存には向いていません。