ユーザースクリプト Chromeのユーザースクリプトをパックします

こんにちは、ハラジテリ。

本日は、クロスブラウザユーザースクリプトを記述するための前述の技術、つまり、Google Chromeの単純な拡張機能へのユーザースクリプトのパッキングについて詳しく説明します。

以下では、「なぜ?」および「どのように?」という質問に答えようとします。

前戯


ご存知のとおり、Google Chromeブラウザーはスクリプトをネイティブにサポートしています(サードパーティのコンポーネントインストールする必要ありません)。 スクリプトのサポートはかなり良いレベルで実装されていますが、1つあります。GoogleChromeの開発者はセキュリティを気にし、制限できるものをすべて制限しています。

これらの制限を考慮すると、重要なスクリプトは拡張機能でラップする必要があります。

制限は何ですか?


最も重要な制限:
  1. スクリプトはクロスドメインリクエストを行う必要があります
  2. スクリプトはwindow.frames [i]にアクセスする必要があります
  3. スクリプトでは、localStorageの制限を増やす必要があります

上記の3つの制限はエミュレートおよび骨化できません。 ユーザースクリプトをパックする必要があります。

出力では何が得られますか?


厳密に言えば、出力では、ユーザースクリプトではなく、 拡張子を取得します。 しかし、それを考慮して:

ユーザースクリプトについて話すことができます。

パッキング


単純な拡張機能は次のもので構成されます。
  1. Manifest.json記述ファイル
  2. 背景ページbackground.html
  3. ユーザースクリプトファイル


manifest.json


このファイルは、拡張子を説明します:リソースを構成する権利、起動方法など。
名前が示すように、構成全体はjsonオブジェクトです。
このファイルの詳細については、 公式ドックをご覧ください。

ユーザースクリプトを拡張機能に変換するために必要な最小要件を検討します。
{ "background_page" : "background.html", "content_scripts" : [ { "js":[ "my.user.js" ], "matches":[ "http://*/*" ], "run_at":"document_end" } ], "description" : "", "name" : "My Userscript", "permissions" : [ "http://*/*", "unlimitedStorage"], "version" : "1.3.0" } 


パラメータ予定解説
background_pageバックグラウンドページファイルを定義します予定は下記をご覧ください
content_scriptsコンテンツスクリプト接続セクションこれは情報が書かれている場所です
ユーザースクリプトについて
jsコンテンツスクリプトファイルの名前を含む配列ここに名前が表示されます。
私たちの唯一のスクリプト
一致するスクリプトを実行するためのURLマスクを含む配列配列の各要素は
コンテンツスクリプトの配列の要素へのインデックス。
このパラメーターは、どのページを決定します
対応するスクリプトが起動されます。
私たちの場合、マスクは
スクリプトがすべてのページで実行されること、
httpで入手できます。
run_atコンテンツスクリプトを起動する順序document_endは
スクリプトが実行されること
DOMツリーを構築した後
説明拡張機能の説明ユーザースクリプトを説明するフリーテキスト
お名前拡張名無料のスクリプト名
許可拡張機能の権限必要なセキュリティ許可。
例の最初のパラメーター
- 通信ドメイン要求のマスクhttp:// * / *
バックグラウンドページから任意のドメインにリクエストを送信できます。

2番目のパラメーターは、 無制限のlocalStorageを設定します
バージョン拡張バージョンXxxxバージョン


background.html


バックグラウンドページは、拡張機能の起動時に「非表示タブ」に読み込まれ、拡張機能のライフサイクル全体を通してバックグラウンドで動作する通常のhtmlページです。
バックグラウンドページのセキュリティ制限は、マニフェストファイルのpermissionsパラメーターによって構成されます。 バックグラウンドページを通じて、ユーザースクリプトの制限が回避されます。 パッケージ化されたユーザースクリプトの背景ページは、 chrome.extension apiDescription )を介してユーザースクリプトと「通信」できるプロキシです。

理論が終わったら、練習して時間を過ごしましょう!
ユーザースクリプトからのクロスドメインリクエストのプロキシをより詳細に検討してみましょう。

コードbackground.html:
 <!DOCTYPE html> <html> <head> </head> <body> <script> /** *    . * XMLHttpRequest      CORP (Cross Origin Request Policy), * ..      . *     GET */ function get(url, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function (data) { if (xhr.readyState == 4) { if (xhr.status == 200) { callback(data.srcElement.responseText); } else { callback(null); } } } // Note that any URL fetched here must be matched by a permission in // the manifest.json file! xhr.open('GET', url, true); xhr.send(); }; /** *   chrome.extension api. *     * @param request Object   api-. * @param sender Object ,    . * @param callback Function ,      api-. * / function onRequest(request, sender, callback) { //       xget. //        RPC-c if (request.action == 'xget') { get(request.url, callback); } }; //   . chrome.extension.onRequest.addListener(onRequest); //        : // chrome.extension.sendRequest({'action' : 'xget', 'url':url}, callback); </scrip> <body></html> 


英語のコメント付きのコードは、 pastebin.comで入手できます。

ユーザースクリプトからの呼び出し:
 /** *      *  : get("http://example.com",alert); */ function get(url, callback) {& chrome.extension.sendRequest({ 'action':'xget', 'url':url}, callback); } 


この方法はGoogle Chromeで機能します。 他のブラウザのユーザースクリプトからのクロスドメインリクエストについては、次のいずれかの記事で説明します。

組み立て、テスト


拡張機能を構築するには、次のものが必要です。
  1. 別のフォルダーを作成する(便宜上)
  2. manifest.js、background.htmlおよびユーザースクリプトファイルをその中に入れます
  3. Chromeを使用して拡張機能をパックします(設定-拡張機能-拡張機能をパックします。スクリーンショットを参照)




テストのために、解凍した拡張機能をインストールできます( ヒントについてはtheOnlyBoyに感謝します)。 パックする代わりに(ポイント3)、[アンパックされた拡張機能をインストールする]をクリックします。
その結果、拡張機能は通常のパックされた拡張機能のようにインストールされます(さらに、拡張機能を再ロードするための便利で便利な再ロードリンクがあります。スクリーンショットを参照してください)。

おわりに


今日はこれで終わりです。
コメントで質問、批判、議論を待っています。


記事のリスト:
  1. ユーザースクリプトの書き方を学ぶ
  2. ユーザースクリプト もっと深く
  3. » ユーザースクリプト。 Chromeのユーザースクリプトをパックします
  4. Usersctripts。 クロスドメインリクエスト

Source: https://habr.com/ru/post/J130436/


All Articles