chrome extensionsから見るwebextensions

75
Chrome Extensions かかかか WebExtensions Firefox Developers Conference 2015 in Tokyo November 15, 2015

Upload: yoichiro-tanaka

Post on 12-Apr-2017

586 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Chrome Extensionsから見るWebExtensions

Chrome Extensions から見るWebExtensions

Firefox Developers Conference 2015 in TokyoNovember 15, 2015

Page 2: Chrome Extensionsから見るWebExtensions
Page 3: Chrome Extensionsから見るWebExtensions
Page 4: Chrome Extensionsから見るWebExtensions
Page 5: Chrome Extensionsから見るWebExtensions
Page 6: Chrome Extensionsから見るWebExtensions
Page 7: Chrome Extensionsから見るWebExtensions

Today's Topic

Page 8: Chrome Extensionsから見るWebExtensions
Page 9: Chrome Extensionsから見るWebExtensions

Today's Topic

WebExtensionsの基礎

Chrome Extensionsとの違い

開発における注意点

Page 10: Chrome Extensionsから見るWebExtensions

ご注意

"くろ〜む "と言った時は、「 Chromeウェブブラウザ」のことです。

"えくすてんしょん "と "拡張機能 "は、同じものを指しています。

Page 11: Chrome Extensionsから見るWebExtensions

WebExtensionsの基礎

Page 12: Chrome Extensionsから見るWebExtensions
Page 13: Chrome Extensionsから見るWebExtensions

今までの拡張機能開発

XUL + XPCOMを利用した開発

Add-on SDKと cfxコマンドを利用した開発

JPMを利用した開発

Page 14: Chrome Extensionsから見るWebExtensions

今までの拡張機能開発

XUL + XPCOMを利用した開発

Add-on SDKと cfxコマンドを利用した開発

JPMを利用した開発

Deprec

ated

Page 15: Chrome Extensionsから見るWebExtensions

WebExtensions

Page 16: Chrome Extensionsから見るWebExtensions
Page 17: Chrome Extensionsから見るWebExtensions
Page 18: Chrome Extensionsから見るWebExtensions
Page 19: Chrome Extensionsから見るWebExtensions

?

Page 20: Chrome Extensionsから見るWebExtensions

Goal of WebExtensions

Firefoxと他のブラウザ間での移植を簡単にする。

addons.mozilla.orgでの審査を簡単にする。

Firefoxのマルチプロセス化との互換性を持たせる。

Firefox内部のコード変更を拡張機能に影響させない。

既存の XPCOM/XUL APIよりも簡単にする。

https://wiki.mozilla.org/WebExtensions

Page 21: Chrome Extensionsから見るWebExtensions

Goal of WebExtensions

Firefoxと他のブラウザ間での移植を簡単にする。

addons.mozilla.orgでの審査を簡単にする。

Firefoxのマルチプロセス化との互換性を持たせる。

Firefox内部のコード変更を拡張機能に影響させない。

既存の XPCOM/XUL APIよりも簡単にする。

⇒ [UP] セキュリティ、安定性の向上

⇒ [UP] 質の高い拡張機能の輸入 /輸出量の向上

⇒ [DOWN] 実現できることの減少

Page 22: Chrome Extensionsから見るWebExtensions

APIs

Page 23: Chrome Extensionsから見るWebExtensions

APIs( Ready to go)

alarms

contextMenus

pageAction

bookmarks

browserAction

cookies

extension

i18n

notifications

runtime

storage

tabs

webNavigation

webRequest

windows

Page 24: Chrome Extensionsから見るWebExtensions

API - browserAction

Page 25: Chrome Extensionsから見るWebExtensions

API - pageAction

Page 26: Chrome Extensionsから見るWebExtensions

API - notifications

Page 27: Chrome Extensionsから見るWebExtensions

API - contentMenus

Page 28: Chrome Extensionsから見るWebExtensions

Content Script

Page 29: Chrome Extensionsから見るWebExtensions

Other APIs

alarms - 一定時間ごとにイベントを発生させてくれる API。

storage - 拡張機能ごとに提供される情報の保存場所。

tabs - タブ関連の操作(新規タブを開いたり一覧を取得したり)。

i18n - 国際化のための API( _locale/...en...ja.../messages.json)。

bookmarks - ブックマークを操作するための API。

...

Page 30: Chrome Extensionsから見るWebExtensions

APIs( Planned)

commands

DevTools

downloads

history

idle

omnibox

permissions

Native messaging

Page 31: Chrome Extensionsから見るWebExtensions

Building Blocks

Page 32: Chrome Extensionsから見るWebExtensions
Page 33: Chrome Extensionsから見るWebExtensions

Building Blocks

必須なファイル

manifest.json - 拡張機能のメタ情報を持つ

任意のファイル

HTMLファイル

CSSファイル

JavaScriptファイル

その他必要なファイル・・・

Page 34: Chrome Extensionsから見るWebExtensions

Minimum Extension

Page 35: Chrome Extensionsから見るWebExtensions

manifest.json

{ "manifest_version": 2, "name": "Minimum Extension", "version": "1.0", "applications": { "gecko": { "id": "[email protected]" } }, "browser_action": { "default_popup": "popup.html" }}

Page 36: Chrome Extensionsから見るWebExtensions

popup.html

<!DOCTYPE html><html> <head></head> <body> <div>Hello, WebExtension!</div> </body></html>

Page 37: Chrome Extensionsから見るWebExtensions

$ cd minimum-extension$ lsmanifest.json popup.html$ zip -r ../minimum-extension.xpi *updating: manifest.json (deflated 42%)updating: popup.html (deflated 23%)$ cd ..$ lsminimum-extension/ minimum-extension.xpi

Page 38: Chrome Extensionsから見るWebExtensions

Configuration

Page 39: Chrome Extensionsから見るWebExtensions

Installing

Page 40: Chrome Extensionsから見るWebExtensions

Installing

Page 41: Chrome Extensionsから見るWebExtensions

Installing

Page 42: Chrome Extensionsから見るWebExtensions

Using the browserAction

Page 43: Chrome Extensionsから見るWebExtensions

Using the browserAction

Page 44: Chrome Extensionsから見るWebExtensions

background

Page 45: Chrome Extensionsから見るWebExtensions
Page 46: Chrome Extensionsから見るWebExtensions

background.htmlbackground.js

Page 47: Chrome Extensionsから見るWebExtensions

popup.htmlpopup.js

Each Event(alarms, tabs, etc.)

Backend server background.htmlbackground.js

Page 48: Chrome Extensionsから見るWebExtensions

manifest.json

{ "manifest_version": 2, ... "background": { "page": "background.html" <or> "scripts": ["background.js"] } ...}

Page 49: Chrome Extensionsから見るWebExtensions

background.js

console.log("Background created.");

function hello() { return "Hello, I'm background context.";}

chrome.alarms.onAlarm.addListener( function(alarm) { console.log("Called by chrome.alarms."); });chrome.alarms.create("", {delayInMinutes:1, periodInMinutes: 1});

Page 50: Chrome Extensionsから見るWebExtensions

popup.htmlpopup.js

Each Event(alarms, tabs, etc.)

Backend server background.htmlbackground.js

chrome.extension.getBackgroundPage()

Page 51: Chrome Extensionsから見るWebExtensions

popup.html

<!DOCTYPE html><html> <head></head> <body> <div>Hello, WebExtension!</div> <script> var bg = chrome.extension.getBackgroundPage(); console.log(bg.hello()); </script> </body></html>

Page 52: Chrome Extensionsから見るWebExtensions
Page 53: Chrome Extensionsから見るWebExtensions
Page 54: Chrome Extensionsから見るWebExtensions

Content Scripts

Page 55: Chrome Extensionsから見るWebExtensions

manifest.json

{ "manifest_version": 2, ... "content_scripts": [ { "matches": ["https://www.eisbahn.jp/*"] "js": ["content_scripts.js"] } ], ...}

Page 56: Chrome Extensionsから見るWebExtensions

content_scripts.js

var body = document.querySelector("body");body.style.transform = "rotate(-180deg)";

Page 57: Chrome Extensionsから見るWebExtensions
Page 58: Chrome Extensionsから見るWebExtensions

Chrome Extensionsとの違い

Page 59: Chrome Extensionsから見るWebExtensions

manifest.json

{ "manifest_version": 2, "name": "Minimum Extension", "version": "1.0", "applications": { "gecko": { "id": "[email protected]" } }, "browser_action": { "default_popup": "popup.html" }}

Page 60: Chrome Extensionsから見るWebExtensions
Page 61: Chrome Extensionsから見るWebExtensions

background

"persistent"属性がサポートされていない。

⇒ Background Contextが常駐している。

⇒ background.htmlや background.jsに情報を保持できる。

⇒ setTimeout(), setInterval()が使える。

⇒ 常にメモリを圧迫している状況。

Page 62: Chrome Extensionsから見るWebExtensions
Page 63: Chrome Extensionsから見るWebExtensions

background

Chromeでは既に persistent=trueの拡張機能は非推奨

⇒ まだ trueもサポートされてはいる。

⇒ 多くの拡張機能は persistent=falseに移行済み。

結果として Chromeから Firefoxに移植する際に問題になる。

⇒ 現状はそれぞれのコードを準備するのが得策。

⇒ Firefoxも persistent=falseのサポートをするのでは?

Page 64: Chrome Extensionsから見るWebExtensions

開発における注意点

Page 65: Chrome Extensionsから見るWebExtensions

Simple

Page 66: Chrome Extensionsから見るWebExtensions
Page 67: Chrome Extensionsから見るWebExtensions

goo.gl URL Shortener

goo.glによる短縮 URL作成、一覧表示

クリックカウントの表示

クリックされたブラウザや地域などの表示

クリック数の時間推移の表示

短縮 URLの QR Code生成

GMail, Facebook, Twitter, Google+へシェア

Pocket (Read It Later)への追加

壁紙の変更

短縮 URLのクリック数の監視と Badge表示

Page 68: Chrome Extensionsから見るWebExtensions
Page 69: Chrome Extensionsから見るWebExtensions

Rejecte

d

Page 70: Chrome Extensionsから見るWebExtensions

良い拡張機能とは

シンプルであること

1つの拡張機能でできることは 1つだけに絞る。

利用者獲得のための欲を出さない

良い拡張機能は何もしなくても絶対流行る。

アイディアと先行者利益で勝負する。

お行儀良く

ガイドラインは守りましょう。

Page 71: Chrome Extensionsから見るWebExtensions

Firefox OS

Page 72: Chrome Extensionsから見るWebExtensions
Page 73: Chrome Extensionsから見るWebExtensions

Conclusion

Firefoxの拡張機能はWebExtensionsに移行します。

WebExtensionsは他のブラウザでも動きます。

今までよりも拡張機能の作り方が簡単になります。

Chrome, Operaと環境差がまだ少しあります。

「 Simple」に作りましょう。

Page 74: Chrome Extensionsから見るWebExtensions

References

WebExtensions - Mozilla Wiki

https://wiki.mozilla.org/WebExtensions

WebExtensions - MDN>Mozilla>Add-ons>WebExtensions

https://developer.mozilla.org/en-US/Add-ons/WebExtensions

Chrome Extensions

https://developer.chrome.com/extensions

Page 75: Chrome Extensionsから見るWebExtensions

Firefox Developers Conference 2015 in Tokyo

Any Questions?