chrome.pageAction.onClicked.addListener は remove 相当がない?

267 views
Skip to first unread message

nakajiman

unread,
Apr 1, 2011, 10:32:30 AM4/1/11
to Chrome API Developers JP
こんばんは。なかじまんです。はじめての投稿です。

i.ntere.st it! という Chrome 拡張を作りました。よかったらお試しください。

i.ntere.st it! は i.ntere.st http://i.ntere.st/ への商品登録を手助けする Chrome 拡張機能
です。
https://chrome.google.com/webstore/detail/hakcadckanmcmpjcdhoplnbpcbiiojfn

この Chrome 拡張は PageAction を試すために作ったものなのですが、
その中でふと不便を感じたことがありまして、念のため確認してみたくなった次第です。

content scripts から chrome.extension.sendRequest で background にメッセージを
送信しています。そして、そのメッセージの内容によって、アドレスバー中のアイコンのク
リックの処理内容を入れ替えたかったのですが、

chrome.pageAction.onClicked.addListener は add はできるけど remove はできない
ものでしょうか? コールバック関数の単位で、処理内容を入れ替えられるのが希望です。

現状は、グローバルなスコープに tabId ごとに状態を保持しておいて、コールバックの
中で tabId で処理を入れ替えています。この方法は、少し違和感があるので、もしも
経験的なベストプラクティスがあれば、ご紹介いただけると勉強になります。

※ すべて把握していませんが PageAction 以外の API でも同様です。

Shogo Ohta

unread,
Apr 2, 2011, 2:45:12 AM4/2/11
to chrome-api-d...@googlegroups.com
こんにちは、太田です。

> chrome.pageAction.onClicked.addListener は add はできるけど remove はできない
> ものでしょうか? コールバック関数の単位で、処理内容を入れ替えられるのが希望です。

onClickedなどのイベントはaddListener のほか、removeListenerとhasListenerを持っていますよ。
http://code.google.com/chrome/extensions/events.html


> 現状は、グローバルなスコープに tabId ごとに状態を保持しておいて、コールバックの
> 中で tabId で処理を入れ替えています。この方法は、少し違和感があるので、もしも
> 経験的なベストプラクティスがあれば、ご紹介いただけると勉強になります。

うーん、確かに微妙なところですね。
chrome.tabs.executeScriptを使えばすこしすっきりするかなと思います。
こんなイメージです(ちゃんと動くか検証していないのですが、ご容赦を…)

var actions = {
load:function(req, sender){
chrome.pageAction.show(sender.tab.id);
},
click:function(req, sender){
chrome.tabs.update(sender.tab.id, { url: url });
}
};
chrome.extension.onRequest.addListener(function(req, sender){
actions[req.action](req, sender);
});
chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(tab.id, {file: 'content.js'});
});

参考になれば幸いです。

--
太田昌吾 <os0...@gmail.com>

2011年4月1日23:32 nakajiman <naka...@lrlab.to>:

> --
> このメールは Google グループのグループ「Chrome API Developers JP」の登録者に送られています。
> このグループに投稿するには、chrome-api-d...@googlegroups.com にメールを送信してください。
> このグループから退会するには、chrome-api-develop...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/chrome-api-developers-jp?hl=ja からこのグループにアクセスしてください。
>

nakajiman

unread,
Apr 3, 2011, 9:47:32 PM4/3/11
to Chrome API Developers JP
おはようございます。なかじまんです。

> onClickedなどのイベントはaddListener のほか、removeListenerとhasListenerを持っていますよ。http://code.google.com/chrome/extensions/events.html

ありがとうございます。見落としていました。
個々の API のリファレンスには addListener しか記載がないのですね。

> うーん、確かに微妙なところですね。
> chrome.tabs.executeScriptを使えばすこしすっきりするかなと思います。
> こんなイメージです(ちゃんと動くか検証していないのですが、ご容赦を…)

ありがとうございます! このコードスニペットは、とても参考になりました。

ただ、いずれにせよ、タブごとの状態が発生してしまうので、その状態を保持
しつつ不要になったら破棄しようとすると、タブのライフサイクルも補足する
必要がありそうなのが理解できました。

http://code.google.com/chrome/extensions/tabs.html#events
> 2011年4月1日23:32 nakajiman <nakaji...@lrlab.to>:
>
> > こんばんは。なかじまんです。はじめての投稿です。
>
> > i.ntere.st it! という Chrome 拡張を作りました。よかったらお試しください。
>
> > i.ntere.st it! は i.ntere.sthttp://i.ntere.st/への商品登録を手助けする Chrome 拡張機能
> > です。
> >https://chrome.google.com/webstore/detail/hakcadckanmcmpjcdhoplnbpcbi...
Reply all
Reply to author
Forward
0 new messages