特定のページでContextMenuなどがnot supportedになる

100 views
Skip to first unread message

highgeo

unread,
Nov 1, 2010, 4:20:50 AM11/1/10
to Chromium-Extensions-Japan
こんにちは

Subjectのとおり、特定のページでchrome.extension.*(確認したのは
getBackgroundPage,contextMenusです)
がエラーになる現象が起きました

ページにエクステンションの無効を指定する記述(あるのかわかりませんが)があるのかと思い、見てみましたが特にそんな物はなかったです
そのページではAutoPagerなどほかのextentionでもエラーとしてコンソールに出ていました

内容は以下のとおりです
Error: chrome.contextMenus is not supported in content scripts. See
the content scripts documentation for more details.
本グループでバージョンの違いでの実装を見たのですがChromeのバージョンは
7.0.517.41
ですのでcontetMenuは実装されているように思うのですが・・・

情報をお持ちの方がいらっしゃいましたら、ご教授ください

よろしくお願いいたします

Ohta Shogo

unread,
Nov 3, 2010, 10:49:29 AM11/3/10
to Chromium-Extensions-Japan
こんにちは、

すみません、お返事遅くなりました。

> Error: chrome.contextMenus is not supported in content scripts. See
> the content scripts documentation for more details.
このエラーからすると、Content Scriptsから直接chrome.contextMenusを呼びだそうとしてしまったのだと思われま
す。

chrome.contextMenusを含め、多くのAPIはContent Scripts上では動作しません。
chrome.contextMenusなどのAPIはBackground Pagesなどの拡張の特権を扱えるページ上で実行する必要がありま
す。

なお、Content ScriptsとBackground Pagesは chrome.extension.sendRequest と
chrome.extension.onRequest.addListener などでメッセージをやり取りすることができます。
少々面倒ですが、特権を持つBackground Pagesと、悪意を持ったスクリプトが含まれる可能性があるウェブページを切り離すためにこのよう
な仕組みになっています。

highgeo

unread,
Nov 6, 2010, 10:47:21 PM11/6/10
to Chromium-Extensions-Japan
こんにちは

すいません、お返事遅れました(メールで届かなかったので)

background_page内で実行していて、ほかのサイトでは実行できるので特定のページとして投稿いたしました
manifest.jsonの記述が悪いのかと思い、削除してみたりしてみましたが違うようです

削除しても動作したのでbackground_page内からのリンクのリソースは自動でパッケージ化されるのですかね
content_scriptsにリソースを記述する物と思っておりました

JavaScriptが悪いのかと思い調べているところですが今のところ原因がわかりません

何かわかりましたらよろしくお願いいたします

一応、GoogleCodeでホスティングしています
http://code.google.com/p/jpqr-chrome-extention/

Ohta Shogo

unread,
Nov 7, 2010, 3:44:35 AM11/7/10
to Chromium-Extensions-Japan
こんにちは、

すこしソースを見てみましたが、right_click.jsというファイルをBackground PageとContent Scriptsの両方
で使用されていますね。
Background Pageではchrome.contextMenusのメソッドを実行できるので、意図通り右クリックメニューに追加できていま
すが、
ContentScriptsでは常にchrome.contextMenusは呼び出せないので、(ContentScriptsが実行される)すべ
てのページで
> Error: chrome.contextMenus is not supported in content scripts. See
> the content scripts documentation for more details.
このエラーが出ています。

重複しますが、chrome.contextMenus APIはBackgroundPageで呼び出すAPIであって、
ContentScriptsからは呼び出せません。
Background PageとContentScriptsは用途が異なり、当然使えるAPIも異なるので、スクリプトも分ける必要があります。


On 11月7日, 午前11:47, highgeo <high...@gmail.com> wrote:
> こんにちは
>
> すいません、お返事遅れました(メールで届かなかったので)
>
> background_page内で実行していて、ほかのサイトでは実行できるので特定のページとして投稿いたしました
> manifest.jsonの記述が悪いのかと思い、削除してみたりしてみましたが違うようです
>
> 削除しても動作したのでbackground_page内からのリンクのリソースは自動でパッケージ化されるのですかね
> content_scriptsにリソースを記述する物と思っておりました
>
> JavaScriptが悪いのかと思い調べているところですが今のところ原因がわかりません
>
> 何かわかりましたらよろしくお願いいたします
>
> 一応、GoogleCodeでホスティングしていますhttp://code.google.com/p/jpqr-chrome-extention/

highgeo

unread,
Nov 7, 2010, 11:42:33 AM11/7/10
to Chromium-Extensions-Japan
こんばんわ

ありがとうございます

おっしゃるとおり、manifest.jsonのcontent_scriptsにある記述をなくしたところ該当エラーはなくなりました
(今度はChromeに関係のないところでエラーになりましたけど・・・)

特定のページではなくBackgroundPageの初期化?時に出ていたようです
デベロッパーツールのコンソールログが表示ページのものとバックグラウンドページのものを見間違えてました
(この辺はいまだにちょっと勘違いしてしまいますね、表示のスコープがまだしっかりつかめていません)

content_scripts内にすべてのリソース(JS、CSSなど)を記述する物とおもって記述していたのがいけなかったようです
background_page内にあるリソースはmanifestファイルに記述しなくてもパッケージングされることを
勘違いして記述おりました

それと、動作できてしまっていたことも勘違いが見つかりにくかったですね
content_scripts側をブラウザが無効にしていたからだと思いますが

ありがとうございました
Reply all
Reply to author
Forward
0 new messages