如何在Safari扩展中基于URL(来自地址栏)进行阻止

时间:2011-06-21 20:07:53

标签: safari safari-extension

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

这对我来说很好,但是当我使用通常的beforeLoad / canLoad处理程序时,我会收到所有需要加载的子项的消息(images / etc. ..),这会搞砸#accessses /小时限我正试图制作。

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

谢谢!

1 个答案:

答案 0 :(得分: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';
       }
   }
}