5

我正在尝试编写一个类似于 Bubble Translate for Chrome 的 Safari 扩展程序。

当您单击工具栏上的按钮时,它会使用 Google 语言 API 自动将当前选择的文本翻译成您选择的语言。

我遇到的问题如下:

该脚本不仅会注入到主页中,还会注入到嵌入页面的广告和类似内容中。因此,所选文本会被多次翻译,因为一页中的所有嵌入脚本都会响应该消息。

如何确保脚本仅注入正确的页面或只有正确的页面响应?

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 回答