2011-08-01 9 views
4

ここに私の苦境があります。 Google Chromeの拡張機能を作成しています。それはうまく動作します。 Google+のテーマです。クロムエクステンションの「閲覧履歴を見る」権限リクエストを削除する

これで十分です。アドレスバーにアイコンを表示するには、アクセス許可の一部として「タブ」が必要です。私はこれも、ウェブストアが私の拡張機能がブラウザの履歴にアクセスできると言ってくれると信じています。これを解決する方法はありますか?

(ここに出典:https://github.com/bichiliad/G-Theme

答えて

3

あなたは、ブラウザアクションのアイコンを表示するためのtabs許可は必要ありませんが、背景ページでごchrome.tabs.onUpdated.addListener()のためにそれを必要とします。

tabs許可が「あなたの閲覧履歴」の警告を引き起こすべきではありません、それはギャラリーのバグです。 specsによれば、「あなたのタブと閲覧活動」と言わなければなりません。私はa bug reportを提出することを提案します。

+0

他の方法でユーザーがGoogle+を閲覧しているかどうかを検出できますか? また、Serg、私はあなたが私の質問のいくつかに答えたように感じる。ありがとう。 – Salem

+0

@Salem既にコンテンツスクリプトをGoogle +にのみ注入しているので、コンテンツスクリプトの最初に、ポップアップアイコンを表示するように要求するバックグラウンドページにリクエストを送信できます。 – serg

+0

ありがとう、私はそのショットを与えるでしょう。 – Salem

-1

編集:これは実際には良い練習ではありません(下記のコメントの詳細)。私は他人に何をしないかを知らせるためにこの答えを削除しません。


私は同じ問題を持っていただけの権限に"http://*/*""https://*/*"を追加することによって、それを解決しました。このよう

"permissions": [ 
    "tabs", 
    "http://*/*", 
    "https://*/*" 
    ] 

私は理由を正確に知っていないと、それは(それをしない?)あまり意味がありませんが、今は「読み、閲覧履歴を変更する」権限メッセージが消えました。

これが役に立ちます。

+1

ええと、「あなたが訪問したすべてのウェブサイト上のすべてのデータを読んだり変更したりします。 「閲覧履歴を読み込んで変更する」の代わりにこれは改善ではありませんか? –

+0

@RobWおっと、私はそれを認識しませんでした。そうです、これはおそらく行く方法ではありません。しかし、私はこれがバグの権利であると理解していますか? – anpa

+2

権限の警告はバグではありません。 '' tabs''(https://developer.chrome.com/extensions/tabs)のドキュメントは、 'tabs' APIの目的についてはっきりしています。あなたが' 'url 'または' faviconUrl'プロパティを設定します。これらのプロパティにアクセスすることで、ユーザーの履歴を作成することができます。その意味で、アクセス許可の警告が正しいことになります。 –

3

のほうが実際にはほんのわずかのものが"tabs"の許可を要するのは面白いです。

ドキュメント自体(強調鉱山)引用:chrome.tabs APIの大半はすべての許可を宣言せずに使用することができます

を。ただし、"tabs"の許可が必要です。には、url,titlefavIconUrlというプロパティのが表示されます。

許可を必要とせずに簡単にタブを操作できます(作成など)。 権限がアクティブな場合(現在のタブで拡張機能が呼び出された場合)、制限付きフィールドはクエリすると、入力されます。


"tabs"の許可を必要としているようだ一つの一般的なタスクは、指定されたアドレスを持つタブを見つけることです。これは許可なしでは不可能でした。特に、query()の前には、すべてのタブを手に入れてフィルタリングするだけでした。

ただし、"tabs"権限がない場合でも、URLパターンでクエリできます。 このURLパターンにはホストのアクセス許可が必要です。

だから、あなたはwww.example.comは、いくつかのタブで開いているかどうかを知りたいとしますコンセプトの

chrome.tabs.query({url: "*://www.example.com/*"}, function(tabs) { 
    // Look, ma, no "tabs"! 
}); 

証明:GitHub

重要:この最後のトリックは、Firefox WebExtensionsでは動作しません。アクセス許可が"tabs"でないURLをタブで​​照会すると、無条件に例外がスローされます。はい、これはChromeの場合でもドキュメントとは直接矛盾しているため、いつの間にか動作を停止する可能性があります。


ここで、(上記の方法で推測できる)正確なURLと一部のタブのタイトル/ファビコンを知りたいとします。引き続き"tabs"のアクセス権が必要ですか?

に依存します。いくつかのWebサイトでのみ必要な場合は、それらのホストのアクセス許可を宣言し、この情報を収穫するコンテンツスクリプトを上記のようにクエリして注入します。

これは別の警告につながる:"tabs"ための1対

読むと{ウェブサイトのリスト}上のデータを変更

閲覧を読みます歴史

これらのサイトのコンテキストでのみ意味のある拡張機能を作成している場合は、合理的な妥協点です。代わりに、あなたが事前に知らないウェブサイトのためにこの情報を取得する必要のある一般的な拡張機能を作成している場合、yes、"tabs"が理にかなっています。

+0

URLパターンを持つタブを照会する 'tabs'パーミッションがなければ動作しません。 _ 1つ以上のURLパターンに対してタブをマッチさせる。フラグメント識別子は一致しないことに注意してください。拡張機能が "tabs"アクセス権を持っていない場合** **このプロパティは無視されます。** .'activeTab'アクセス権を使用すると、_could_は動作しますが、クエリが 'pageAction'によって開始された場合にのみバックグラウンドスクリプトから実行することはできません。 –

+0

@KohányiRóbert私はその方法で動作する拡張機能を(そして 'activeTab'なしで)展開したので、動作していることが分かります。私はあなたが照会しているパターンをカバーするホストパーミッションを持っているという追加の要件があると思います。 Firefoxはドキュメントに従っているので、移植性のないコードです。 – Xan

+0

@KohányiRóbert[許可](https://github.com/kav2k/chandlery/blob/master/src/manifest.json#L37-L41)、[この方法で 'query'を使ってコードする](https:// github .com/kav2k/chandlery/blob/master/src/js/notification.js#L100-L107)。 FWIWでは、コードは通知クリックから「ユーザアクション」として実行されるため、 'activeTab'アクティブ化基準を満たします。しかし、私はその許可を持っていません。 – Xan

関連する問題