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

如何在safari扩展中基于URL(从地址栏)进行阻止,safari,safari-extension,Safari,Safari Extension,我正在尝试编写一个扩展,如果URL每小时被访问超过N次,它将阻止对URL(可配置)列表的访问。据我所知,我需要一个启动脚本将“我应该加载此”消息传递到一个全局HTML页面(可以访问设置对象以获取URL列表),该页面将向启动脚本返回竖起/竖起消息以拒绝/允许加载 这对我来说很好,但当我使用通常的beforeLoad/canLoad处理程序时,我会收到需要加载的所有子项(图像等)的消息,这会破坏我试图设定的访问/小时限制 有没有一种方法可以在两个沙盒之间同步地来回传递消息,这样我就可以告诉全局HTM

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

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

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


谢谢

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

在全局脚本中:

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';
       }
   }
}
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';
       }
   }
}