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



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

这对我来说很好,但当我使用通常的beforeLoad/canLoad处理程序时,我会收到所有需要加载的子项(图像等)的消息,这会破坏我试图设置的#访问次数/小时限制。

有没有一种方法可以在两个沙盒之间同步地来回传递消息,这样我就可以告诉全局HTML页面,"这是窗口栏中的URL和这个请求何时到来的时间戳",这样我就能限制重复的请求?

谢谢!

您可以为检查是否允许加载页面的函数使用不同的消息,而不是使用与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';
       }
   }
}

最新更新