これは、Opera用のカスタムスクリプトの記述に関するシリーズの最初の記事です。 当初、単一の記事が計画されていましたが、すでに10画面を超えており、まだ追加されています。
- 最初の記事は、ユーザースクリプト(以降、userjs)、その機能、および対応するOpera設定の簡単な説明です。 これは公式文書の無料の改定です。 少なくとも1つのuserjsを書いた人はだれでも、この部分を明確な良心をもってスキップできます。
- 2番目の記事は 、userjsでコードを再利用する問題と、Operaのユーザースクリプト(以降userjs)を作成するときの設定の保存、クリップボードへのアクセス、クロスドメインリクエストなどのさまざまなトリックに焦点を当てています。
- 3番目の記事では、特に機密データまたはファイルシステムへのアクセスを提供する高度なトリックを使用する場合に、userjsを作成する際のセキュリティ問題を扱います。
- 4番目の記事は userjsフレームワークに焦点を当てています。これは、説明したトリックの既製の実装です。
記事は、javascriptとDOMをよく知っている読者を対象としています。 userjsでjavascriptを使用する機能のみが説明されています。
定義
Userjsは、各ページが読み込まれる前にOperaによって実行されるjavascriptスクリプトであり、そのコンテンツを変更できます。
Operaのセットアップ
最初は、Operaのインストール後、スクリプトへのパスが設定に登録されていないため、userjsを使用するには、設定([詳細]タブ→[コンテンツ]タブ→[JavaScript]ボタン→[カスタムスクリプトのJavaScriptフォルダー]フィールド)に移動し、パスを指定する必要がありますスクリプトフォルダに。
これは、「opera:config#UserPrefs | UserJavaScriptFile」の設定ページでも実行できます。
セキュリティのため、httpsアクセスでのuserjsの実行はデフォルトで無効になっています。 必要に応じて、設定でこれを変更できます(「opera:config#UserPrefs | UserJavaScriptonHTTPS」)。
Userjsの実行順序
Operaは、指定されたフォルダー内のすべての* .jsファイルをダウンロードして実行します。 したがって、スクリプトを無効にするには、拡張子を変更するだけです。 起動順序は、Opera 9、Opera 10、およびアルファベット順では定義されていません。
フォルダーは、ページが読み込まれるたびにスキャンされます。 スクリプトを追加、変更、または削除する場合、Operaを再起動する必要はなく、ページをリロードするだけです。
すべてのuserjsは、名前が「.user.js」で終わるスクリプトを除いて、ページがロードされる前に実行されます-GreaseMonkeyとの互換性のためにページがロードされた後に実行されます。
userjsのスペル
帽子
帽子はオプションです。 ヘッダーは、スクリプトと作成者に関するさまざまな情報、およびスクリプトを実行する(
include )またはしない(@exclude)アドレスパターンを示します。 デフォルトでは、スクリプトはすべてのページで実行されます。
スクリプトが特定のサイトでのみ有用である場合-アドレスを確認する代わりに
includeを使用すると、これは高速になります。
// == UserScript ==
// @nameクールスクリプト
// @descriptionいくつかのクールなことをします。
// @author some@cool.programmer.com
// @include http://some.host/*
// @exclude http://some.host/path/*
// == / UserScript ==
コード
スクリプトは、ロードされたページのコンテキストで実行され、グローバルウィンドウオブジェクトを共有します。したがって、競合を避けるために、グローバル変数を作成しないでください。 通常、匿名スコープは新しいスコープを決定するために使用され、すぐに実行されます。 内部では、「var」を使用して変数を宣言します。
(関数(){
var CONST = "const";
//何かをします。
})();
追加機能
userjsのロード期間中、Operaはいくつかの追加機能を提供します。 すべてのuserjsを読み込んだ後、それらは無効になるため、これらのハンドラーがuserjsで記述されていても、イベントハンドラーで使用することはできません。
defineMagicVariable
window.opera.defineMagicVariable(name、getter、setter)を使用すると、値の取得および設定関数を使用してグローバル変数をオーバーライドできます。 サイトのなりすましスクリプトを許可します。
セッターはオプションです(
nullを指定)。
window.opera.defineMagicVariable( 'isIE'、function(val){return true;});
defineMagicFunction
window.opera.defineMagicFunction(name、func)は、グローバル関数をオーバーライドします。
window.opera.defineMagicFunction( 'setTitle'、function(original、_this、title){
window.status = '設定タイトル';
return original.apply(_this、title);
});
addEventListener
window.opera.addEventListener(名前、ハンドラー、キャプチャー)は
window.addEventListenerとインターフェース互換ですが、追加のイベントをサポートします。 すべてを説明するわけではありませんが、最も重要なのは「BeforeEvent.type」と「AfterEvent.type」です。「type」の代わりに、イベントの名前を置き換える必要があります(「DOMContentLoaded」、「click」、「load」、...)
サンプルスクリプト
最も一般的なのは、ページコードを変更して広告を削除したり、リンクを追加したりするuserjsです。 この場合、ページがロードされるのを待つ必要があります。 タイプコード:
(関数(){
opera.addEventListener( 'BeforeEvent.DOMContentLoaded'、function(ev){
var elem = document.getElementById( 'ad'); //広告ユニット
elem.style.display = 'none';
}、true);
})();