0

我正在尝试编写一个扩展程序,如果每小时访问次数超过 N 次,它将阻止对(可配置的)URL 列表的访问。据我了解,我需要一个启动脚本将“我应该加载这个”消息传递给全局 HTML 页面(谁可以访问设置对象以获取 URL 列表),谁会竖起大拇指/竖起大拇指消息返回到启动脚本以拒绝/允许加载。

这对我来说很好,但是当我使用通常的 beforeLoad/canLoad 处理程序时,我会收到所有需要加载的子项目(图像/等等)的消息,这搞砸了我的 #accesses/hour 限制我正在努力。

有没有办法在两个沙箱之间来回同步传递消息,这样我就可以告诉全局 HTML 页面,“这是窗口栏中的 URL 和这个请求进入的时间戳”,所以我可以限制重复请求?

谢谢!

4

1 回答 1

0

您可以为检查是否允许加载页面的函数使用不同的消息,而不是使用与 beforeLoad 处理程序相同的消息。例如,在注入的脚本(必须是“启动”脚本)中,输入:

safari.self.tab.dispatchMessage('pageIsLoading');

在全局脚本中:

function handleMessage(event) {
   if (event.name == 'pageIsLoading') {
       if (event.target.url.indexOf('forbidden.site.com') > -1) {
           console.log(event.timeStamp);
           event.target.url = 'about:blank';
       }
   }
}
于 2011-06-23T17:58:34.077 回答