WKWebView 正在尝试在后台运行,尽管它已关闭并且应该被处置

Posted

技术标签:

【中文标题】WKWebView 正在尝试在后台运行,尽管它已关闭并且应该被处置【英文标题】:WKWebView is trying to run on background, although it's closed and should be disposed 【发布时间】:2020-12-05 21:40:50 【问题描述】:

我在应用程序的 UIViewController 容器中有一个简单的 WKWebView。用户将使用 WKWebView 打开此 UIViewController 容器,然后最终使用导航“返回”项将其关闭。导航项配置容器和 WKWebView。它可以工作,但在每次关闭时,我都会在日志中看到以下错误:

第一对错误:

[assertion] 获取断言时出错:, NSLocalizedFailureReason=Target 未运行或缺少所需的目标权利>

[ProcessSuspension] 0x7f8f9d404210 - ProcessAssertion:无法为 PID 27176 的进程获取 RBS 后台断言“WebProcess Background Assertion”,错误:错误域 = RBSAssertionErrorDomain 代码 = 3“目标未运行或缺少所需的目标权利”用户信息 = RBSAssertionAttribute=, NSLocalizedFailureReason=Target 未运行或缺少所需的目标权利

第二对错误:

[assertion] 获取断言时出错:

[ProcessSuspension] 0x7f8f9d005c30 - ProcessAssertion:无法为 PID 27176 的进程获取 RBS 后台断言“WebProcess Background Assertion”,错误:错误域=RBSAssertionErrorDomain 代码=2“指定的目标进程不存在”UserInfo=NSLocalizedFailureReason=Specified目标进程不存在

第三对错误:

无法通知服务 com.apple.WebKit.WebContent: 113: 找不到指定的服务

无法向服务 com.apple.WebKit.Networking 发出信号:113:找不到指定的服务

WKWebView 是从容器 UIViewController 的viewDidDisappear 中处理的(也尝试将其移动到viewWillDisappear,这没有区别),方法如下:

webView.stopLoading()
webView.configuration.userContentController.removeScriptMessageHandler(forName: "...")
webView.navigationDelegate = nil
webView.scrollView.delegate = nil
webView = nil

这些错误似乎没有负面影响。但我想了解:我是否错过了对 WKWebView 处置的一些清理工作?为什么会尝试“进入后台”?

【问题讨论】:

我遇到了相同的错误集,但是当我单击 WKWebView 中的一个链接时,我得到了这些错误,该链接具有我的 WKWebView 正在使用 WKWebViewConfiguration().setURLSchemeHandler(.setURLSchemeHandler(. ..) 我尝试通过 Xcode 项目中的 Capabilities 部分添加后台处理,但这对错误没有任何影响。 在使用 Cordova 应用程序时,我在 iPhone 11 PRO 和 iPhone 11 Mini 上遇到了类似的问题。有关更多信息,请参阅以下问题:***.com/questions/67571345/… @MarcelSchürmann 就我而言,这些只是警告。到目前为止,我们没有看到它们引起的任何副作用或类似的事情...... 【参考方案1】:

我遇到了同样的问题,发现了这两个有趣的线程:

    https://developer.apple.com/forums/thread/112095 Apple 支持人员声称这些警告(例如,Could not signal service com.apple.WebKit.Networking: 113: could not find specified service)不是您应该担心的问题 Xcode 8, ios 10 - "Starting WebFilter logging for process" 这是帮助我消除这些警告的唯一解决方案。基本上,你应该设置 OS_ACTIVITY_MODE = disable

【讨论】:

这是一个糟糕的答案(来自 Apple 的家伙)......如果你不应该担心,为什么要首先警告它? 这在 iOS 14 中仍然发生......并且 webview 不会加载 这适用于 Xcode 13 beta 5 和 iOS 15。同样适用于 iOS 12 和 13。唯一的版本问题是 iOS 14。

以上是关于WKWebView 正在尝试在后台运行,尽管它已关闭并且应该被处置的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView 在后台应用程序时停止音频

WKWebView 在后台时不运行 JavaScript

属性在模板中不存在,尽管它已分配

`ctx.prisma.status is not a function` 错误,即使它已定义

使WKWebView在后台保持不变,同时显示另一个视图

C++ 在后台运行程序 Windows 10