Chrome Extension development
始めに
私がChrome拡張機能作りたいと思ったのは、Chrome拡張機能のネイティブAPIを使えばHttpOnly属性付きのクッキー取得等ができる等、色々なメリットがあるからでした。Chrome拡張機能はHTMLとCSSとJavascriptで作られているので、Webサイトの開発経験があれば、開発は簡単です。
Manifest File
拡張機能の開発でまず最初に必要なのはmainfest.json
を作成です。Manifest Fileとはその拡張機能に関する情報を書くものです、例えば、拡張機能の作者や名前、アイコン、必要な権限などのメタ情報などです。
{
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [ {
"js": ["js/cookie.js" ],
"matches": [ "https://qiandao.today/*" ]
} ],
"default_locale": "en",
"description": "an extension for get HTTP ONLY cookies",
"icons": {
"32": "images/logo32.png",
"16": "images/logo16.png",
"48": "images/logo48.png",
"128": "images/logo128.png"
},
"manifest_version": 2,
"permissions": [ "cookies", "tabs", "http://*/*", "https://*/*"],
"name": "Get HTTP ONLY cookies",
"version": "0.0.6"
}
mainfest.json
の内容についてちょっと説明します。
background
常にバックグラウンドで動いてるスクリプトです。拡張機能をタスクや状態を管理する目的で使います、API利用制限はありません。persistent
属性をfalse
にすると、必要になったら動き、不必要になったらアイドル状態になり、メモリが開放されます。
content_scripts
Webページの中に挿入するCSSとJavaScriptのことを「Content Scripts」と呼びます。matches
属性は実際実行するのURLです。
セキュリティ上の理由で、このJavaScriptは独自の実行環境にあり、挿入先のWebページのDOMにはアクセスでますが、そのページで定義した変数や関数にアクセスすることはできません。
Content-Scriptsは下記のAPI利用できない制限があります。
- extension ( getURL , inIncognitoContext , lastError , onRequest , sendRequest )
- i18n
- runtime ( connect , getManifest , getURL , id , onConnect , onMessage , sendMessage )
- storage
permissions
特定のAPIを使うためにはその権限を宣言する必要があります。どんな権限が必要になるかは、各APIのドキュメントを見ればわかります。
manifest_version
これはマニフェストファイルのバージョンを示しているメタデータです。この記事の執筆時点での最新版は2となっています。特別な理由がない限り、常に最新版を利用しましょう。
Content-Script と Background の相互通信
Content-ScriptとBackgroundはメッセージのやり取りで互いにコミュニケーションを取ることができます。
// background listen message
chrome.runtime.onMessage.addListener(function (message) {
console.log(message);
});
// Content-Script send message
chrome.runtime.sendMessage('Hello World!');
これで、Content-Script側では使えないAPIをBackgroundに委託して、間接的に色んなAPIが使えるようになります!
Exmaple
私は簡単な拡張機能アプリを作りました。GetCookies
この拡張機能を使うと、HttpOnly属性付きのクッキーが取得できます。
まとめ
以上、簡単にChrome拡張機能を作る上での基本的なところをご紹介しました。いろんなAPIを使って面白いアプリ作成するのきっかけになれば嬉しいです!
APIは多種多様な機能ありますので、ぜひ一度チェックしてみてください!