chrome.tabsの一部のAPIにはパーミッションが不要だと知ったので備忘録
どうも。えーたんです。
先日Chrome Web Storeから、公開している拡張機能の不要な権限を削除するようにお願いされました。どうやらtabs
パーミッションが不要だったようです。
本記事では、Chrome拡張機能のtabs
パーミッションについて調査したことを紹介します。
パーミッションが不要なタブのAPIがある
chrome.tabs
APIの中には、tabs
パーミッションの不要なAPIがいくつかあります。
以下は公式ドキュメントの引用です。
Most features do not require any permissions to use. For example: creating a new tab, reloading a tab, navigating to another URL, etc.
新しいタブの作成create
やリロードreload
、別のURLへの遷移update
などが対象のようです。
実際に試してみる
パーミッションが不要である例を実際に作成して確認しました。
今回の拡張機能の作成にはCRXJS Vite Pluginを使いました。リポジトリは以下です。
まず、manifestのpermissions
を空にしています。
ポップアップ画面には、chrome.tabs
のcreate
、reload
、update
の3つのAPIを叩くボタンを追加しました。
ボタンを押すと、各APIの動作確認ができます。
パーミッションを追加すると取得できる情報が増える
tabs
パーミッションを必要としないAPIでも、取得できるタブの情報はtabs
パーミッションの有無によって変わります。
具体的には、tabs
パーミッションを追加することでfavIconUrl
、pendingUrl
、title
、url
などが取得できます。
以下のようにtabs
パーミッションを加え、タブオブジェクトのキーを表示してみました。
import { defineManifest } from "@crxjs/vite-plugin";
export default defineManifest({
manifest_version: 3,
name: "tabs example",
description: "chrome.tabs example",
version: "1.0.0",
- permissions: [],
+ permissions: ["tabs"],
action: { default_popup: "index.html" },
});
app.innerHTML = `
<h1>Hello Vite!</h1>
<button id="create">chrome.tabs.create</button>
<button id="reload">chrome.tabs.reload</button>
<button id="update">chrome.tabs.update</button>
+ <button id="info">tab info</button>
`;
document.getElementById("create")?.addEventListener("click", () => {
chrome.tabs.create({ url: "https://zenn.dev/eetann" });
});
document.getElementById("reload")?.addEventListener("click", () => {
chrome.tabs.reload();
});
document.getElementById("update")?.addEventListener("click", () => {
chrome.tabs.update({ url: "https://github.com/eetann" });
});
+ document.getElementById("info")?.addEventListener("click", () => {
+ chrome.tabs.update({ url: "https://github.com/eetann" }, (tab) => {
+ if (typeof tab !== "undefined") {
+ console.log(Object.keys(tab));
+ }
+ });
+ });
まず、以下がtabs
パーミッション無しでのタブオブジェクトのキーの一覧です。
次に、tabs
パーミッションありでの一覧です。
増えていることが分かります。
警告ってどんな感じ?
不要な権限を持ったChrome拡張機能に対する警告は、以下のようにメールで来ます。
メールが来てから2週間以内に対応しないと削除されるようです。
筆者の拡張機能が違反したケースはPurple Potassium
(過剰な権限の付与)でした。
まとめ
- 公式ドキュメントを読もう
-
chrome.tabs
の一部のAPIにはパーミッションが不要 -
tabs
パーミッションを追加することで取得できる情報が増える - 不要な権限を持ったChrome拡張機能は、Chrome Web Storeから削除される可能性がある
Discussion