Как я могу заблокировать на основе URL (из адресной строки) в расширении сафари - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь написать расширение, которое блокирует доступ к (настраиваемому) списку URL, если к ним обращаются более N раз в час. Из того, что я понимаю, мне нужно, чтобы стартовый сценарий передавал сообщение «должен ли я загрузить это» на глобальную HTML-страницу (кто может получить доступ к объекту настроек, чтобы получить список URL-адресов), который будет давать большие пальцы вверх / вниз вернитесь в стартовый скрипт, чтобы запретить / разрешить загрузку.

Это хорошо работает для меня, но когда я использую обычные обработчики beforeLoad / canLoad, я получаю сообщения для всех подпунктов, которые должны быть загружены (images / etc ..), что портит # acances / лимит часов я пытаюсь сделать.

Есть ли способ синхронно передавать сообщения назад и вперед между двумя песочницами, чтобы я мог сообщить глобальной HTML-странице: «Это URL-адрес в строке окна и отметка времени, когда поступил этот запрос», поэтому я могу ограничить повторяющиеся запросы?

Спасибо!

1 Ответ

0 голосов
/ 23 июня 2011

Вы можете использовать другое сообщение для функции, которая проверяет, разрешена ли загрузка страницы, вместо того, чтобы использовать то же сообщение, что и для вашего обработчика 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';
       }
   }
}
...