Блокировщик контента - Swift | IOS

Я пытаюсь получить URL-адрес, когда пользователь посещает веб-сайт в Safari.

У меня была идея использовать Content Blocker, но я не нашел способа получить URL веб-сайта в моем blockList.json файл.

Я пытался что-то напечатать в классе ContentBlockerRequestHandler, но ничего не произошло.

Вот класс:

class ContentBlockerRequestHandler: NSObject, NSExtensionRequestHandling {

    func beginRequest(with context: NSExtensionContext) {

        let attachment = NSItemProvider(contentsOf: Bundle.main.url(forResource: "blockerList", withExtension: "json"))!

        print("test")

        let item = NSExtensionItem()
        item.attachments = [attachment]

        context.completeRequest(returningItems: [item], completionHandler: nil)

    }

}

Существует ли альтернативное решение или какое решение?

Спасибо

1 ответ

ОБНОВЛЕНИЕ: Вы можете сделать действие и вызвать и просто заблокировать все на странице, выбрав HTML-тег. Вы не можете получить URL, на котором находится пользователь, потому что это нарушение конфиденциальности. Вместо этого у вас есть предопределенные правила о том, как и когда сафари должно что-то блокировать. Итак, если вы хотите скрыть всю страницу, вы можете использовать правило json:

    "action":{
          "type": "css-display-none"
          "selector": "#html"
     }

Выше блокирует все в тегах HTML, не отображая его. Затем вы используете триггерный словарь:

     "trigger": {
           "if-domain": ["domaintoblock.com", "blocktodomain.org"]
           "url-filter": ".*"
     }

if-domainВаш список сайтов для блокировки и url-filter указывает "к каким ресурсам обращаться при загрузке"- источник 1. Вышеуказанный элемент скрывает только элемент. Если вы хотите полностью заблокировать загрузку, используйте "type": "block" в ваших действиях вместо. Смотрите 6: 25 в видео WWDC. Блокировщики содержимого - это просто правила массива JSON. Чтобы добавить цель в ваш проект> Расширение приложения> Расширение блокировщика контента. Каждый раз, когда загружается ваш Safari, расширение вашего приложения будет загружать свой байт-код, и вам придется передать Safari свой blockerList.json в beginRequestWithExtensionContext(context: NSExtensionContext), Смотрите 9: 29 в видео WWDC. Оттуда вы сделали, это автоматически. Этого должно быть достаточно, чтобы вы начали. Дайте мне знать, если я помог. Огромное спасибо:)

Обратитесь к https://developer.apple.com/videos/play/wwdc2015/511/ за дополнительной информацией о блокировке контента. Для более подробного и более сложного примера см. https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/AppExtensionKeys.html

ПРЕДЫДУЩИЙ ПОСТ

Вы можете рассмотреть возможность расширения Safari. У них есть удобное мероприятие, которое может принести вам пользу. SafariBeforeNavigateEvent вызывается прямо перед загрузкой страницы. Вы можете использовать другой метод под названием preventDefault() чтобы остановить загрузку страницы. Таким образом, используя это в сочетании с вашим blockList.json файл, вы можете проверить, есть ли у вызываемого события URL, который находится в blockList.json. Вам нужно сначала проанализировать JSON как объект, чтобы использовать его. Оттуда это просто for loop в обработчике событий. Вам нужно другое свойство SafariBeforeNavigateEvent какой url, Дайте мне знать, если это помогло, спасибо:)

https://developer.apple.com/documentation/safariextensions/safaribeforenavigateevent https://developer.apple.com/documentation/safariextensions/safarievent/1635502-preventdefault https://developer.apple.com/documentation/safariextensions/safarievent https://developer.apple.com/documentation/safariextensions

Другие вопросы по тегам