2017-06-23 38 views
0

我想在用户访问Safari上的网站时检索URL。内容拦截器 - Swift | iOS

我有想法使用内容拦截器,但我没有找到任何方法来获取我的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) 

    } 

} 

是否替代解决方案不存在,或者该如何解决?

感谢

回答

1

UPDATE:可以拍动作和触发,只是通过选择HTML标记阻止网页上的所有内容。您无法获取用户所在的网址,因为这是违反隐私的行为。相反,你有预定义的规则,如何和什么时候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加载时,您的应用扩展程序都会加载它的字节码,您必须在beginRequestWithExtensionContext(context: NSExtensionContext)中为Safari提供您的blockerList.json。请参阅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扩展。他们有一个方便的事件可能会使你受益。在页面加载之前调用SafariBeforeNavigateEvent。您可以使用另一种称为preventDefault()的方法停止加载页面。因此,通过将此文件与blockList.json文件结合使用,您可以检查所调用的事件是否具有位于blockList.json中的url。您需要首先解析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

+0

感谢您的帮助,我会看看这个,) – fredericdnd

+0

你提到的是适用于MacOS的文档,我试图找到对于iOS的解决方案;) – fredericdnd

+0

好吧,我会尽力帮助。让我看看我是否可以找到任何其他解决方案。 –