Chrome拡張機能のイベント周りや審査でハマった件について


Amazonの検索URL末尾に &emi=AN1VRQENFRJN5 をつけると怪しいパチモンとか高額商品とかが消えてスッキリするらしい

Chrome拡張機能を作ってみたかったので、これをネタにサクッと作ってしまおうと軽い気持ちで作り始めたらいろいろハマりました

Chromeウェブストアに無事掲載できましたが、思ったより苦労したのでハマった点などを記録します。

ソースコードは https://github.com/hazurupuzzle/amazon-emi-AN1VRQENFRJN5

メイン機能よりChrome拡張機能のイベント周りで苦労する

URLにパラメータ付けてリロードするだけのメイン機能は1秒で実装したものの、
アクティブなタブのURLを見て拡張機能のアイコンの色を変えるのに苦労しました。

アクティブなタブのURLを見て拡張機能の(BrowserActionの)アイコンを変更する

初見ではどのイベントが必要かなかなかわからなかった…

必要なイベントは3つ

  1. chrome.tabs.onActivated : タブを選択してアクティブになったとき
  2. chrome.tabs.onUpdated : タブの状態が変化したとき (URL変わったときなど)
  3. chrome.windows.onFocusChanged : Chromeのウィンドウにフォーカスしたとき。作った拡張機能ではChromeのウィンドウが複数ある時にこのイベント捕捉してアイコンの色を変える必要がありました

イベントハンドラにはタブの情報が渡されますが、タブのURLは manifest.jsonpermissions に指定したものでないと取得できません。上記のイベントでは取得できないのですが、イベントによっては取得できたりして混乱しました。

例えば chrome.browserAction.onClicked は拡張機能のアイコンをクリックしたときのイベントですが、
これは permission に何も指定されていなくてもアイコンをクリックした時のタブのURLが取得できます。

Googleの審査に落ちた

Chrome拡張機能をChromeウェブストアに掲載するためには審査が必要です。
プライバシーポリシーのページも用意したし、
こんな単純な機能なら審査落ちる理由もないだろうと思っていたらリジェクトされました。
リジェクト理由は下記の内容です。

違反: キーワード スパム:
違反事項: アイテムの説明に過剰かつ / または無関係なキーワードが含まれている。
違反コンテンツ: "Amazon"
修正方法: 過剰かつ / または無関係なキーワードを削除します。
プログラム ポリシーの関連セクション:
誤解を生じさせるメタデータ、誤った形式のメタデータ、説明的でないメタデータ、関連性のないメタデータ、過剰なメタデータ、不適切なメタデータ(拡張機能の説明、デベロッパー名、タイト> ル、アイコン、スクリーンショット、プロモーション画像を含むが、これらに限定されない)を含む拡張機能は許可されません。(詳細)

申請時に拡張機能の必要最小限の説明しか入れていないつもりだったのでスパム判定されるとは思いませんでした。
たしかに拡張機能の説明を読み直してみると 「Amazon」 という単語が8箇所あったので、これがNG判定されました。
省略しても意味が通りそうな部分を削って再提出したら翌日申請は通りました。

(Chrome拡張機能とは関係ないけど) ブックマークレットでハマる

ブックマークレット もついでに書きました。

スクリプトを1行にして終わり!
と思っていたんですがエスケープしてなくてハマりました。
シンタックスエラーになってくれれば分かりやすかったのですが、中途半端に動くせいでハマるという罠

minifyして1行にして javascript: を手前につけるだけでは動かないことがあります。
encodeURIComponent でエスケープした上でリンクにしましょう…

開発当初は自動でパラメータをつけるよう実装していた

Amazonの検索結果画面のURLに &emi=AN1VRQENFRJN5 のパラメータをつけると、検索結果のカテゴリによっては結果が0件になることが判明したので、自動でパラメータをつけるのは没になりました。そんなこんなで結局1日潰してしまった…