既存のWebサイトにカスタム機能(プラグイン)を注入できるChrome拡張機能
A plugin-based Chrome extension for injecting custom features into any website.
WSI は、ユーザがZIP形式でプラグインをインポートし、指定したドメインでだけ実行する、開発者向けのプラグインプラットフォームです。ドメイン単位でカスタマイズを管理でき、プラグインは簡潔な SDK(WSI.addButton / WSI.addPanel / WSI.storage / WSI.fetch など)を通じてページへ機能を追加します。

plugin.json + main.js(+ CSS)の3ファイルaddButton / addPanel / storage / fetch / onPageLoad など、数十行で実用プラグインが書けるWSI.fetch — 他サイトのAPIにもアクセスできる(Service Worker 経由)chrome.storage.local のみ使用、外部送信なし現在 Chrome Web Store へ申請中です。承認され次第、ここにリンクを掲載します。
git clone https://github.com/Serendipity1118/WebSystemInjection.git
chrome://extensions を開き、右上のデベロッパーモードをONsrc/ ディレクトリを選択Chrome Web Store 版でも、プラグインを実行する前に chrome://extensions の WSI 詳細画面でユーザースクリプトを許可をONにしてください。
インストール直後は空の状態です。以下のサンプルを順に試すことで、WSI でできることの感覚がつかめます。各サンプルは手順説明付きのREADMEと、そのままインポート可能なZIPを同梱しています。
| サンプル | 対象 | 概要 | 主なSDK |
|---|---|---|---|
| hello-world | example.com | 👋 ボタンを表示する入門サンプル | addButton / getConfig / log |
| url-expander | 全サイト | 短縮URLにホバーすると最終URLをツールチップ表示 | fetch(HEAD + リダイレクト追跡) |
| markdown-copy | 全サイト | 選択テキストをMarkdown形式でクリップボードにコピー | addButton + Selection API + Clipboard API |
| highlighter | 全サイト | ページをハイライト、URL別に永続化、再訪時に自動復元 | storage 4API + onPageLoad |
| outline-panel | 全サイト | h1〜h6 見出しからTOCサイドパネルを生成 | addPanel + onPageLoad |
📘 ビジュアル版 プラグイン開発ガイド も用意しています(ローカルで開く場合は html/index.html をブラウザで直接開いてください)。以下は要約版です。
my-plugin/
├── plugin.json # 必須: プラグイン定義
├── main.js # 必須: プラグイン本体
└── style.css # 任意: スタイルシート
plugin.json の最小例{
"formatVersion": 2,
"id": "my-plugin",
"name": "My Plugin",
"version": "1.0.0",
"description": "説明文",
"domains": ["example.com", "*.example.com"],
"scripts": { "main": "main.js" },
"permissions": ["storage"]
}
WSI.fetch を使う場合は、permissions に "fetch" も追加します。形式v1(formatVersion 未指定)も読み込めますが、新規・更新プラグインには形式v2を使用してください。
domains には対象サイトを配列で指定:
"example.com" — 完全一致"*.example.com" — サブドメイン全て"*" — 全サイト(WSI v1.2.0〜)main.js の例WSI.addButton({
text: '▶',
position: 'bottom-right',
onClick: () => alert('Hello!'),
});
WSI.log('プラグインが読み込まれました');
3ファイルをZIPにまとめ、WSIポップアップの「プラグインを追加」からドロップ。詳しい仕様は doc/要件定義.md を参照。
| API | 用途 |
|---|---|
WSI.addButton(options) |
フローティングボタンを追加(ドラッグで移動可能、位置はプラグイン別に永続化) |
WSI.addPanel(options) |
サイドパネルを追加 |
WSI.storage.get/set/remove/getAll |
プラグイン固有の永続ストレージ |
WSI.fetch(url, options) |
CORS制限なしの fetch(Service Worker 経由) |
WSI.onPageLoad(callback) |
SPA の URL 変更を検知 |
WSI.getConfig() |
plugin.json の config 値を取得 |
WSI.log(message) |
[WSI:<plugin-id>] プレフィックス付きログ |
詳細: doc/要件定義.md
WSI本体はユーザーデータを開発者のサーバーへ送信しません。設定とプラグインデータは原則としてブラウザ内の chrome.storage.local に保存されます。ユーザーがインポートしたプラグインは対象サイトのコンテンツを扱い、外部通信を行う場合があります。詳細は プライバシーポリシー をご確認ください。
npm install
npm run playwright:install # 初回のみ
npm run test:e2e # e2e テスト実行
npm run test:e2e:headed # ブラウザを表示しながら
開発者向けの追加情報:
ISC