0

次のように、ネイティブ メッセージング サンプル アプリを外部 Web ページに読み込もうとしています。

test.html

<html>
<head>
</head>
<body>
<iframe src="chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/main.html"</iframe>
</body>    
</html>

web_accessible_resourcesアプリのマニフェストにプロパティを追加しました:

マニフェスト.json

{
  // <some code snipped>
  "web_accessible_resources": ["main.html"]
}

ただし、test.html 内でアプリを使用すると、アプリ内の JavaScript ファイルに起因する次のエラーがコンソールに表示されます。

開発者コンソール

キャッチされていない TypeError: オブジェクト # にはメソッド 'connectNative' がありません main.js:51

問題のあるコード行は次のとおりです。

main.js

port = chrome.runtime.connectNative(hostName);

これがスクリーンショットです - Connect ボタン (connect関数を呼び出す) をクリックすると問題が発生します:

JavaScript エラー: キャッチされていない TypeError: オブジェクト #<Object> にメソッド 'connectNative' がありません

明らかに、これはアプリがスタンドアロンで実行されているときに機能します。アプリを Web ページにロードするにはどうすればよいですか?

4

1 に答える 1

1

できません。ごくわずかな例外を除いて、Chrome はオープン Web に対する独自の拡張機能を回避しています。まさにそれを求めています: 別のブラウザーではなく Chrome で開かれているという理由だけで、標準外の機能を持つ外部 Web ページ。今日の Web では、この種の動作は開発者とユーザーのエクスペリエンスの低下につながります。ネイティブ メッセージングのドキュメントでは、必要な機能が Chrome 拡張機能と Chrome アプリで利用できることが示唆されています。これはアプリとしては機能しますが、Web 標準の iframe としては機能しません。これは仕様によるものです。

おそらく、Chrome 拡張機能を作成したいと思うでしょう。Web ページは、Chrome 拡張機能がインストールされているかどうか、およびユーザーのブラウザーが Chrome であるかどうかを検出する必要があります。Chrome でない場合は、適切なエラー メッセージが表示されます。Chrome で拡張機能がインストールされていない場合は、ユーザーに拡張機能をインストールするよう促す必要があります。

于 2013-11-28T16:06:28.220 に答える