5

Chrome用のバブル翻訳に似たサファリ拡張機能をコーディングしようとしています。

ツールバーのボタンをクリックすると、現在選択されているテキストがGoogle言語APIを使用して選択した言語に自動的に翻訳されます。

私が抱えている問題は次のとおりです。

スクリプトは、メインページだけでなく、ページに埋め込まれている広告や同様のものにも挿入されます。そのため、1ページに埋め込まれたすべてのスクリプトがメッセージに応答するため、選択したテキストは複数回翻訳されます。

スクリプトが適切なページにのみ挿入されていること、または適切なページのみが応答していることを確認するにはどうすればよいですか?

4

2 に答える 2

3

グローバル スクリプトが挿入されたスクリプトからのメッセージに応答する場合、次のように応答メッセージにターゲット タブの URL を含めます。

var message = {
  translation: result.translation,
  url: event.target.url
}
event.target.page.dispatchMessage("displayTranslation", message);

次に、挿入されたスクリプトのメッセージ ハンドラーで、メッセージで渡された URL がページの URL と一致することを次のように確認します。

if (event.name === "displayTranslation" && 
     event.message.url === window.location.href) {
  alert(event.message.translation);
}

そうすれば、リクエストを発信したフレーム内のスクリプトのみがレスポンスに作用します。

于 2011-06-21T16:27:53.150 に答える
1

スクリプトが挿入されているページがフレーム内にないことを確認できます。

if (window == window.parent) { /* you're not inside a frame! */ }

<object>ただし、HTMLを埋め込んだタグの内側から機能するかどうかはわかりません。たぶんそうです。

于 2010-06-17T16:52:27.220 に答える