こんにちは,
ユーザースクリプトとは
User Scriptsとは,
しかし,
ChromeのUser ScriptsとGreasemonkeyのほかにも,
導入
まずは,
ChromeのUser Scriptsは起動オプションで --enable-user-scripts というオプションを付けることで使用可能になります。Windows XP, Windows Vistaでのパスは以下の通りです。[username] の部分にはログインしているユーザー名が入ります。
"C:\Documents and Settings\[username]\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" --enable-user-scripts
"C:\Users\[username]\AppData\Local\Google\Chrome\Application\chrome.exe" --enable-user-scripts
オプションを付けて起動すると,
Windowsの場合,
Windows XP
C:\Documents and Settings\[username]\Local Settings\Application Data\Google\Chrome\User Data\Default\
Windows Vista
C:\Users\[username]\AppData\Local\Google\Chrome\User Data\Default\
このUser Scriptsフォルダにファイル名が .user.
User Scriptsの仕様
Greasemonkeyを意識して実装されていますので,
スクリプトの実行タイミングはGreasemonkeyと同じく,
DOMContentLoaded (DOMの構築後, 画像などの読み込み完了前) で起動します。 スクリプトの実行コンテキストがサイト側のスクリプトと分かれています。このため意図せずにグローバル変数を使用してしまったり,
サイト側のスクリプトの処理を上書きしてしまうようなことはありません。
ただし,
@exclude, @require, @resourceなどのメタデータを使用できません。
unsafeWindowに相当するサイト側のグローバルオブジェクトがありません
(Chrome 2ではcontentWindowという名前でサイト側のグローバルオブジェクトにアクセスできましたが, Chrome 3以降では廃止されています)。 サイト側のコンテキストでJavaScriptを実行したい場合,
ブックマークレット (location. hrefにjavascriptスキームを代入するなどの方法で実現できます) として実行するか, script要素を作ってコードをテキストノードとして挿入する必要があります。 GM_
setValue, GM_ getValueなどのGM APIもほとんど使用できません。Chrome 2では名前だけ定義だけされていて, 実際には使用できない状態で非常に厄介なことになっていましたが, Chrome 3, 4では定義されていない状態に修正されました。 GM APIで使用可能なのはGM_
addStyle, GM_ xmlhttpRequest (ただし, ドメインを超えることはできません), GM_ openInTab (実装はwindow. openのラッパー), GM_ log (やはりconsole. logのラッパー) の4つです。
また,
- @matchメタデータ
-
@matchは@includeの改良版という位置づけで,
@includeよりも正確なパターン指定が可能です。@matchはhttpなどのschemeパート, google. comなどのhostパート, /search?などのpathパートに分けてマッチングが行われます。@includeでは http://*.google. com/* というパターンが, http:// another. site. com/?.google. com/ にもマッチしてしまうという問題がありますが, こういった問題は@matchでは起こりません。 @includeとは書式が異なる部分が多いので,
詳細はMatch patternsを参照してください。特に, Bad patternはやってしまいがちなパターンがまとめられています。 - @run-atメタデータ
-
@run-atはdocument-startと指定することで,
ページのDOM構築を待たずに, 読み込みを開始したタイミングでスクリプトを実行します。実行タイミングが速いので, 例えばショートカットキーなどをこのタイミングで登録すればユーザーの待ちを軽減することができます。ただし, 当然ながらDOM要素にアクセスできないため, 出来ることは大幅に制限されます。 Content Scriptでも同様のことが可能ですが,
run_ atとdocument_ startという組み合わせであり, ハイフンではなくアンダースコアという違いがあるので注意が必要です。
これらの点に注意すれば,