问题标签 [safari-content-blocker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
285 浏览

swift - 如何在内容拦截器处于活动状态时重新加载它们?

我有一个带有多个内容拦截器扩展的应用程序。他们的配置很好,他们按照他们应该的方式行事。

reloadContentBlocker(withIdentifier:completionHandler:)但是,例如,SFContentBlockerManager当我更新过滤器列表时,我需要打电话。

这是一个代码示例(下面使用 NSLog 用于时间戳):

这就是印刷品:

16:41:43.391543+0200重新加载开始
16:41:43.392003+0200重新加载内容拦截器
16:41:43.392125+0200重新加载 'com.aaa.bbb.ContentBlocker.ExampleA'
16:41:50.010102+0200成功重新加载 'com. aaa.bbb.ContentBlocker.ExampleA'
16:41:50.010299+0200重新加载 'com.aaa.bbb.ContentBlocker.ExampleB'
16:41:50.351554+0200无法重新加载 'com.aaa.bbb.ContentBlocker.ExampleB':操作无法完成。(WKErrorDomain 错误 2。)
16:41:50.351676+0200重新加载 'com.aaa.bbb.ContentBlocker.ExampleC'
16:41:50.493327+0200无法重新加载 'com.aaa.bbb.ContentBlocker.ExampleC':操作无法'没有完成。
16:41:50.493429+0200重新加载“com.aaa.bbb.ContentBlocker.ExampleD”
16:41:50.631578+0200无法重新加载“com.aaa.bbb.ContentBlocker.ExampleD”:操作无法完成。(WKErrorDomain 错误 2。)
16:41:50.631681+0200重新加载 'com.aaa.bbb.ContentBlocker.ExampleE'
16:41:50.718466+0200无法重新加载 'com.aaa.bbb.ContentBlocker.ExampleE':操作无法'没有完成。(WKErrorDomain 错误 2。)
16:41:50.718600+0200重新加载结束

它显然试图重新加载一个又一个内容阻止程序(就像我想对DispatchSemaphore. 然而,在第一个成功之后,以下是失败的。

现在让我们在 Setting App > Safari > Content Blockers 中禁用 Content Blockers,然后再试一次:

16:55:05.699392+0200重新加载开始
16:55:05.700171+0200重新加载内容拦截器
16:55:05.700564+0200重新加载 'com.aaa.bbb.ContentBlocker.ExampleA'
16:55:05.714444+0200成功重新加载 'com. aaa.bbb.ContentBlocker.ExampleB'
16:55:05.714909+0200重新加载 'com.aaa.bbb.ContentBlocker.ExampleB'
16:55:05.723056+0200成功重新加载 'com.aaa.bbb.ContentBlocker.ExampleB'
16:55 :05.723343+0200重新加载'com.aaa.bbb.ContentBlocker.ExampleC'
16:55:05.730565+0200成功重新加载'com.aaa.bbb.ContentBlocker.ExampleC'
16:55:05.730775+0200重新加载'com.aaa.bbb .ContentBlocker.ExampleD'
16:55:05.735733+0200成功重新加载 'com.aaa.bbb.ContentBlocker.ExampleD'
16:55:05.735841+0200重新加载 'com.aaa.bbb.ContentBlocker.ExampleE'
16:55:05.740758+0200成功重新加载 'com.aaa.bbb.ContentBlocker. ExampleE'
16:55:05.740865+0200重新加载结束

惊喜......它的工作原理。但我宁愿不要求我的用户:

  1. 在设置中手动禁用内容阻止程序
  2. 手动执行更新(等待开发自动刷新)
  3. 去手动重新启用设置中的内容阻止程序

我在某处遗漏了一些东西(可能是线程问题)。希望有人能够提供帮助!

0 投票
1 回答
335 浏览

swift - 如何在运行时添加或删除 safari 内容阻止列表的规则

我在我的项目 safari 内容拦截器扩展中使用。当我在 blockerList.json 文件中静态设置规则并运行项目时,一切正常。现在我想使用下面描述的技术动态设置我的规则。

伙计们请帮我在运行时动态设置规则。

我试试这个,但是当我遇到错误时

  1. 从视图控制器类加载
  1. 并在 ContentBlockerRequestHandler 类中编写
  1. 我尝试使用加载

当尝试在运行时执行第三个数字块时,我遇到了错误。但是我转到文件路径并检查了 json 绝对没问题,它是一个有效的 json。

0 投票
3 回答
666 浏览

ios - 如何知道 WKContentRuleList 阻止了什么

众所周知,我们可以使用 WKContentRuleList 来阻止 url 请求/cookie 或在 WKWebView 中执行其他操作。有什么方法可以让我们根据 WKContentRuleList 知道 WKWebView 阻止了什么?

0 投票
1 回答
190 浏览

ios - SwiftUI:如何将内容阻止程序应用于 chrome?

我目前正在使用内容拦截器扩展,它适用于 Safari。但是有谁知道它是否也可以应用于 Chrome,如果可以,如何?

我有另一个问题:是否可以使用内容阻止程序扩展或其他方式阻止应用程序

0 投票
1 回答
203 浏览

flutter - appwebview 中的 contentblocker 问题

嗨,我尝试使用 ContentBlocker 阻止广告,但它不起作用,我尝试使用 androidShouldInterceptRequest 并且它工作正常但无法在 ios 上进行测试我只是尝试阻止所有包含“voiranime”的 url,我使用该正则表达式“。 *" 但不工作

0 投票
0 回答
114 浏览

ios - iOS 内容阻止程序重新加载 - 无法与帮助应用程序通信

您好,感谢您的宝贵时间。

我正在开发一个 iOS 应用程序,它具有内容拦截器作为其功能之一。为此,我们有一个用户可以随意启用/禁用的预定义规则列表,以及输入自定义规则的选项。

每当发生更改(启用、禁用、添加或删除)时,我都会获取所有规则并重新创建 JSON 文件,每 150K 规则一个文件(我们有多个内容阻止程序)。大多数用户只需要一个 JSON 文件。

问题

大多数时候,它运作良好。内容阻止程序重新加载,我可以在 Safari 中验证它是否正常工作。

但是,有时在调用时SFContentBlockerManager.reloadContentBlocker(withIdentifier:completionHandler:),它会返回以下错误:

Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.SafariServices.ContentBlockerLoader" UserInfo={NSDebugDescription=connection to service named com.apple.SafariServices.ContentBlockerLoader}

本地化描述:Couldn’t communicate with a helper application.

找不到发生这种情况的原因。以前的一些研究表明这可能与应用程序组有关,但我验证了它们并且它们设置正确(即使因为阻止程序重新加载大部分时间都有效)。

我在生产中看到了许多这样的错误(添加了一个日志)。

谢谢您的帮助。

更新

不确定,但我认为这可能与扩展中的内存有关。当 JSON 文件大约 12mb 时,我会更频繁地收到错误。

现在,如果我限制为 10mb,我不会再收到错误(到目前为止)。

0 投票
0 回答
16 浏览

ios - 将嵌套的 div 类添加到 blockerList.json

我目前正在开发一个 Safari 应用程序扩展程序,它会阻止社交媒体页面中的某些元素。例如我想阻止喜欢的数量。在 safari 的 web 控制台中检查时,我看到了 div 元素

我现在的问题是我不确定如何在我的 blockerList.json 中阻止这个元素。这是我的方法,但似乎不起作用:

我的问题是,我必须注入一些 js 还是更好的方法?

感谢您的帮助。

0 投票
0 回答
27 浏览

swift - 面临 Safari 扩展的 ContentBlockerRequestHandler 问题

我目前正在开发一个阻止内容的 Safari 应用程序扩展。我希望用户配置规则(打开和关闭规则)。由于我无法覆盖捆绑的 JSON 文件,也无法写入文档文件夹,因为扩展程序无法访问它,所以我决定使用 App Groups。我的方法如下所示: 在 ContentBlockerRequestHandler 中,我想将 blockerList.json 保存到应用程序组中(仅在第一次启动时)完成此操作后,我希望处理程序通过获取我的 url 从应用程序组中读取json 在应用程序组中,而不是在扩展中采用默认 json 因为我无法调试处理程序,所以我不知道我是否在正确的路径上。下面显示了我的代码:

类 ContentBlockerRequestHandler: NSObject, NSExtensionRequestHandling {

感谢您的帮助

0 投票
0 回答
40 浏览

ios - 在 Safari 设置中处于活动状态时重新加载内容阻止程序

我制作了一个内容拦截器应用程序,它从服务器下载 json 数据并使用应用程序组将其添加到 blockerList.json,以便我的主包和扩展可以从中读取。我在应用程序中有一个简单的开关,它只是在开关关闭时从 blockerList.json 文件中删除所有内容,并在打开时在 blockerList.json 中添加正确的正则表达式。但是当我从 safari 设置打开开关并尝试重新加载ContentBlocker 时,它会返回错误

操作无法完成。(WKErrorDomain 错误 2。)

在 Safari 设置中关闭开关时,它不会返回任何错误。有没有人在调用 reloadContentBlocker 时遇到过类似的问题?

0 投票
1 回答
145 浏览

css - 在 iOS 内容阻止中选择 CSS Parent `selector`

我正在设置一些内容拦截器(https://developer.apple.com/documentation/safariservices/creating_a_content_blocker

我正在测试的 HTML 看起来像这样:

现在,我想知道我是否可以有一个 CSS 选择器,它选择打开.bad但随后删除整个.randomdiv 块。

我试过这样的事情:

div:has(a)

似乎没有任何效果。

任何人都知道它是否可能?我什至找不到任何说明苹果对此支持的地方(CSS4?)