内容拦截器-Swift | iOS
当用户在Safari上访问网站时,我试图检索URL 我想使用内容拦截器,但在blockList.json文件中找不到任何获取网站URL的方法 我试图在ContentBlockerRequestHandler类中打印一些内容,但什么也没发生 下面是课堂:内容拦截器-Swift | iOS,ios,swift,url,safari-content-blocker,Ios,Swift,Url,Safari Content Blocker,当用户在Safari上访问网站时,我试图检索URL 我想使用内容拦截器,但在blockList.json文件中找不到任何获取网站URL的方法 我试图在ContentBlockerRequestHandler类中打印一些内容,但什么也没发生 下面是课堂: class ContentBlockerRequestHandler: NSObject, NSExtensionRequestHandling { func beginRequest(with context: NSExtension
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)
}
}
是否存在替代解决方案,或者解决方案是什么
谢谢更新:您可以通过选择html标记来执行操作和触发,并阻止页面上的所有内容。您无法获取用户所在的URL,因为这违反了隐私。相反,您有关于safari应该如何以及何时阻止某些内容的预定义规则。
因此,如果您想隐藏整个页面,可以使用json规则:
"action":{
"type": "css-display-none"
"selector": "#html"
}
上面的代码通过不显示来阻止html标记中的所有内容。
然后使用触发器字典:
"trigger": {
"if-domain": ["domaintoblock.com", "blocktodomain.org"]
"url-filter": ".*"
}
如果域是要阻止的站点列表,url筛选器指定加载时应用于哪些资源-源1。
以上内容仅在视图中隐藏该元素。如果要完全阻止加载,请在操作中使用type:block。请参见WWDC视频中的6:25。内容拦截器只是JSON数组规则。要使其成为目标,请将目标添加到项目>应用程序扩展>内容阻止程序扩展。每次加载Safari时,应用程序扩展都会加载其字节码,您必须在BeginRequestWithExtensionContext:NSExtensionContext中为Safari提供blockerList.json。请参阅WWDC视频中的9:29。从那里你就完成了,这是自动的。这应该足够让你开始了。如果我帮忙,请告诉我。多谢各位:
有关内容阻止的更多信息,请参阅。有关更详细、更困难的示例,请参见
以前的职位
你可以考虑浏览Safari扩展。他们有一个方便的活动,可以让你受益。SafariBeforeNavigateEvent在页面加载之前调用。您可以使用另一个名为preventDefault的方法停止加载页面。因此,结合使用blockList.json文件,您可以检查调用的事件是否具有blockList.json中的url。您需要首先将JSON解析为对象才能使用它。从这里开始,它只是事件处理程序中的一个for循环。您需要SafariBeforeNavigateEvent的另一个属性,即url。如果这有帮助,请告诉我,谢谢:
谢谢你的帮助,我会看看这个;您提到的文档是针对macOs的,我试图为iOS找到解决方案;好的,我会尽力帮忙的。。让我看看是否能找到其他解决方案。据wwdc称,safari扩展了我提供给你的iOS和macOS上的链接。有关iOS safari内容阻止的更多信息,请参阅。谢谢@Mihir Thanekar,我会试试这个!