Safari扩展-响应消息的注入脚本过多

问题描述 投票:5回答:2

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

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

我的问题如下:

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

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

safari safari-extension
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);
}

这样,只有发出请求的帧中的脚本才会对响应起作用。


1
投票

也许您可以检查注入脚本的页面不在框架内:

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

我不确定它是否可以从嵌入HTML的<object>标签内部运行。可能是的。

© www.soinside.com 2019 - 2024. All rights reserved.