0

当用户在 Safari 上访问网站时,我正在尝试检索 URL。

我有使用 Content Blocker 的想法,但我没有找到任何方法可以在我的blockList.json文件中获取网站的 URL。

我试图在 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)

    }

}

是否存在替代解决方案,或者解决方案是什么?

谢谢

4

1 回答 1

1

更新:您可以进行操作并触发,然后通过选择 html 标记来阻止页面上的所有内容。您无法获取用户所在的 URL,因为这违反了隐私。相反,您已经预定义了 Safari 应该如何以及何时阻止某些内容的规则。所以,如果你想隐藏整个页面,你可以使用 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",请改为在您的操作中使用。请参阅 WWDC 视频中的 6:25。内容拦截器只是 JSON 数组规则。要将目标添加到您的项目>应用程序扩展>内容阻止程序扩展。每次您的 Safari 加载时,您的应用程序扩展都会加载它的字节码,并且您必须将您的 blockerList.json 文件提供给 Safari beginRequestWithExtensionContext(context: NSExtensionContext)。请参阅 WWDC 视频中的 9:29。从那里你就完成了,它是自动的。这应该足以让你开始。让我知道我是否有帮助。非常感谢:)

有关内容阻止的更多信息,请参阅https://developer.apple.com/videos/play/wwdc2015/511/。有关更详细、更难的示例,请参阅https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/AppExtensionKeys.html

上一篇文章

您可以考虑查看 Safari Extensions。他们有一个方便的活动,可能会使您受益。SafariBeforeNavigateEvent在页面加载之前调用。您可以使用另一种方法preventDefault()来停止加载页面。因此,将它与您的blockList.json文件结合使用,您可以检查调用的事件是否具有 blockList.json 中的 url。您需要先将 JSON 解析为对象才能使用它。从那里它只是for loop事件处理程序中的一个。您需要 的另一个属性SafariBeforeNavigateEventurl。让我知道这是否有帮助,谢谢:)

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

于 2017-06-27T18:50:08.517 回答