SlideShare a Scribd company logo
Chrome Extensions から見る
WebExtensions
Firefox Developers Conference 2015 in Tokyo
November 15, 2015
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
Today's Topic
Chrome Extensionsから見るWebExtensions
Today's Topic
WebExtensionsの基礎
Chrome Extensionsとの違い
開発における注意点
ご注意
"くろ〜む"と言った時は、
「Chromeウェブブラウザ」
のことです。
"えくすてんしょん"と"拡張機能"は、
同じものを指しています。
WebExtensionsの基礎
Chrome Extensionsから見るWebExtensions
今までの拡張機能開発
XUL + XPCOMを利用した開発
Add-on SDKとcfxコマンドを利用した開発
JPMを利用した開発
今までの拡張機能開発
XUL + XPCOMを利用した開発
Add-on SDKとcfxコマンドを利用した開発
JPMを利用した開発
WebExtensions
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
?
Goal of WebExtensions
Firefoxと他のブラウザ間での移植を簡単にする。
addons.mozilla.orgでの審査を簡単にする。
Firefoxのマルチプロセス化との互換性を持たせる。
Firefox内部のコード変更を拡張機能に影響させない。
既存のXPCOM/XUL APIよりも簡単にする。
https://wiki.mozilla.org/WebExtensions
Goal of WebExtensions
Firefoxと他のブラウザ間での移植を簡単にする。
addons.mozilla.orgでの審査を簡単にする。
Firefoxのマルチプロセス化との互換性を持たせる。
Firefox内部のコード変更を拡張機能に影響させない。
既存のXPCOM/XUL APIよりも簡単にする。
⇒ [UP] セキュリティ、安定性の向上
⇒ [UP] 質の高い拡張機能の輸入/輸出量の向上
⇒ [DOWN] 実現できることの減少
APIs
APIs(Ready to go)
alarms
contextMenus
pageAction
bookmarks
browserAction
cookies
extension
i18n
notifications
runtime
storage
tabs
webNavigation
webRequest
windows
API - browserAction
API - pageAction
API - notifications
API - contentMenus
Content Script
Other APIs
alarms - 一定時間ごとにイベントを発生させてくれるAPI。
storage - 拡張機能ごとに提供される情報の保存場所。
tabs - タブ関連の操作(新規タブを開いたり一覧を取得したり)。
i18n - 国際化のためのAPI(_locale/...en...ja.../messages.json)。
bookmarks - ブックマークを操作するためのAPI。
...
APIs(Planned)
commands
DevTools
downloads
history
idle
omnibox
permissions
Native messaging
Building Blocks
Chrome Extensionsから見るWebExtensions
Building Blocks
必須なファイル
manifest.json - 拡張機能のメタ情報を持つ
任意のファイル
HTMLファイル
CSSファイル
JavaScriptファイル
その他必要なファイル・・・
Minimum Extension
manifest.json
{
"manifest_version": 2,
"name": "Minimum Extension",
"version": "1.0",
"applications": {
"gecko": {
"id": "minimum-extension@eisbahn.jp"
}
},
"browser_action": {
"default_popup": "popup.html"
}
}
popup.html
<!DOCTYPE html>
<html>
<head></head>
<body>
<div>Hello, WebExtension!</div>
</body>
</html>
$ cd minimum-extension
$ ls
manifest.json popup.html
$ zip -r ../minimum-extension.xpi *
updating: manifest.json (deflated 42%)
updating: popup.html (deflated 23%)
$ cd ..
$ ls
minimum-extension/ minimum-extension.xpi
Configuration
Installing
Installing
Installing
Using the browserAction
Using the browserAction
background
Chrome Extensionsから見るWebExtensions
background.html
background.js
popup.html
popup.js
Each Event
(alarms, tabs, etc.)
Backend serverbackground.html
background.js
manifest.json
{
"manifest_version": 2,
...
"background": {
"page": "background.html"
<or>
"scripts": ["background.js"]
}
...
}
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});
popup.html
popup.js
Each Event
(alarms, tabs, etc.)
Backend serverbackground.html
background.js
chrome.extension.getBackgroundPage()
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>
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
Content Scripts
manifest.json
{
"manifest_version": 2,
...
"content_scripts": [ {
"matches": ["https://www.eisbahn.jp/*"]
"js": ["content_scripts.js"]
} ],
...
}
content_scripts.js
var body = document.querySelector("body");
body.style.transform = "rotate(-180deg)";
Chrome Extensionsから見るWebExtensions
Chrome Extensionsとの違い
manifest.json
{
"manifest_version": 2,
"name": "Minimum Extension",
"version": "1.0",
"applications": {
"gecko": {
"id": "minimum-extension@eisbahn.jp"
}
},
"browser_action": {
"default_popup": "popup.html"
}
}
Chrome Extensionsから見るWebExtensions
background
"persistent"属性がサポートされていない。
⇒ Background Contextが常駐している。
⇒ background.htmlやbackground.jsに情報を保持できる。
⇒ setTimeout(), setInterval()が使える。
⇒ 常にメモリを圧迫している状況。
Chrome Extensionsから見るWebExtensions
background
Chromeでは既にpersistent=trueの拡張機能は非推奨
⇒ まだtrueもサポートされてはいる。
⇒ 多くの拡張機能はpersistent=falseに移行済み。
結果としてChromeからFirefoxに移植する際に問題になる。
⇒ 現状はそれぞれのコードを準備するのが得策。
⇒ Firefoxもpersistent=falseのサポートをするのでは?
開発における注意点
Simple
Chrome Extensionsから見るWebExtensions
goo.gl URL Shortener
goo.glによる短縮URL作成、一覧表示
クリックカウントの表示
クリックされたブラウザや地域などの表示
クリック数の時間推移の表示
短縮URLのQR Code生成
GMail, Facebook, Twitter, Google+へシェア
Pocket (Read It Later)への追加
壁紙の変更
短縮URLのクリック数の監視とBadge表示
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
良い拡張機能とは
シンプルであること
1つの拡張機能でできることは1つだけに絞る。
利用者獲得のための欲を出さない
良い拡張機能は何もしなくても絶対流行る。
アイディアと先行者利益で勝負する。
お行儀良く
ガイドラインは守りましょう。
Firefox OS
Chrome Extensionsから見るWebExtensions
Conclusion
Firefoxの拡張機能はWebExtensionsに移行します。
WebExtensionsは他のブラウザでも動きます。
今までよりも拡張機能の作り方が簡単になります。
Chrome, Operaと環境差がまだ少しあります。
「Simple」に作りましょう。
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
Firefox Developers Conference 2015 in Tokyo
Any Questions?

More Related Content

PDF
concrete5
 バージョン5.7のご紹介
PPTX
Cloud 9を使ってみよう
PDF
concrete5 勉強会 20150117_テーマ作成
PDF
concrete5で社内システムのお話し
PPTX
第1回concrete5初心者向け勉強会
PDF
concrete5で制作・運用する多言語ウェブサイト
PDF
concrete5って何?〜Web制作者対象〜2014年版
PDF
WordPress使いの為のconcrete5導入
concrete5
 バージョン5.7のご紹介
Cloud 9を使ってみよう
concrete5 勉強会 20150117_テーマ作成
concrete5で社内システムのお話し
第1回concrete5初心者向け勉強会
concrete5で制作・運用する多言語ウェブサイト
concrete5って何?〜Web制作者対象〜2014年版
WordPress使いの為のconcrete5導入

What's hot (20)

PPTX
これからはじめるConcrete5
PPTX
CMS の今後と IoT 〜 concrete5 などの CMS が進む道
PPT
第22回creators meet up資料
PDF
第4回concrete5初心者勉強会-基礎編-
PDF
WordPress使いのためのconcrete5入門
PPTX
第3回concrete5初心者勉強会
PPTX
これからはじめるConcrete5
PPTX
その後のBash on windows
PDF
ブロックエディターで WordPress は この先どう変わる ?
PPTX
Concrete5を簡単・安心に使おう
PDF
WordPressカスタム三兄弟、concrete5ならこう作る。
PPTX
Docker webinar 20170426−01
PDF
その Web サイト、その Web アプリを最新の IE11 に対応しよう
PDF
concrete5で行なうcms導入提案のポイント
PPTX
どうなるflash!?
PDF
Windows Insider Program という取り組みについて ~ Fall Creators Update を踏まえて
PDF
プラグイン公開までの道のり
PDF
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
PDF
「なんとなく」の壁を越えよう! 〜自信を持ってWordPressを選択するためのヒント〜
PPTX
concrete5 最新情報
これからはじめるConcrete5
CMS の今後と IoT 〜 concrete5 などの CMS が進む道
第22回creators meet up資料
第4回concrete5初心者勉強会-基礎編-
WordPress使いのためのconcrete5入門
第3回concrete5初心者勉強会
これからはじめるConcrete5
その後のBash on windows
ブロックエディターで WordPress は この先どう変わる ?
Concrete5を簡単・安心に使おう
WordPressカスタム三兄弟、concrete5ならこう作る。
Docker webinar 20170426−01
その Web サイト、その Web アプリを最新の IE11 に対応しよう
concrete5で行なうcms導入提案のポイント
どうなるflash!?
Windows Insider Program という取り組みについて ~ Fall Creators Update を踏まえて
プラグイン公開までの道のり
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
「なんとなく」の壁を越えよう! 〜自信を持ってWordPressを選択するためのヒント〜
concrete5 最新情報
Ad

Similar to Chrome Extensionsから見るWebExtensions (20)

PDF
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
PPT
素敵なjavascript ~google chrome編~
PPTX
Media programing2012
PPT
Chrome 拡張のご紹介
PDF
Firefox拡張機能を始める
PDF
20140409勉強会
PPTX
Chrome拡張機能の作りかた
PPTX
Chrome Extensionsの基本とデザインパターン
PDF
Chrome Apps & Chromeウェブストア概要
PPTX
Chrome拡張で改善 表紙
PDF
ChatWorkではじめるChrome Extensionもぐもぐ会
PDF
モダンな感じでChrome Extension作ってみた
PDF
クロスブラウザ拡張ライブラリExtension.js
PDF
Secret of Firefox
PPTX
ブラウザの拡張機能を使おう
 
PDF
Chrome DevTools.next
PDF
Firefox Add-on SDK 入門
PPTX
拡張機能の歴史と標準化
PDF
App007 ほしい機能を作ろ
PPTX
App007 ほしい機能を作ろ
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
素敵なjavascript ~google chrome編~
Media programing2012
Chrome 拡張のご紹介
Firefox拡張機能を始める
20140409勉強会
Chrome拡張機能の作りかた
Chrome Extensionsの基本とデザインパターン
Chrome Apps & Chromeウェブストア概要
Chrome拡張で改善 表紙
ChatWorkではじめるChrome Extensionもぐもぐ会
モダンな感じでChrome Extension作ってみた
クロスブラウザ拡張ライブラリExtension.js
Secret of Firefox
ブラウザの拡張機能を使おう
 
Chrome DevTools.next
Firefox Add-on SDK 入門
拡張機能の歴史と標準化
App007 ほしい機能を作ろ
App007 ほしい機能を作ろ
Ad

More from Yoichiro Tanaka (14)

PPTX
Navigate users from assistant app to android app
PPTX
みんなの知らないChrome appsの世界
PPTX
Chromeウェブストア - Html5とか勉強会42
PPTX
Info scoop opensource
PDF
SocialWeb-Japan Vol.2 20090428
PPT
JRuby on Rails
PPT
JavaEdge第3回ライブセッション
PPT
maven2+aptで楽々ドキュメント
PPT
丸山先生レクチャーシリーズ2007-2008
PPT
Sun Tech Days 2007 Mash up
PPT
体操競技のルール改正と今後の日本の方向性
PPT
Wicket勉強会2
PPS
世間の荒波を乗りこなせ!
Navigate users from assistant app to android app
みんなの知らないChrome appsの世界
Chromeウェブストア - Html5とか勉強会42
Info scoop opensource
SocialWeb-Japan Vol.2 20090428
JRuby on Rails
JavaEdge第3回ライブセッション
maven2+aptで楽々ドキュメント
丸山先生レクチャーシリーズ2007-2008
Sun Tech Days 2007 Mash up
体操競技のルール改正と今後の日本の方向性
Wicket勉強会2
世間の荒波を乗りこなせ!

Chrome Extensionsから見るWebExtensions