ios - WKWebView swiftUI 在第二次尝试时崩溃
问题描述
我在 SwiftUI 视图内的 WKWebView 中播放 youtube 视频(嵌入 url)时遇到问题。
这是我的 SwiftUI WebView 代码
import SwiftUI
import UIKit
import WebKit
struct WebView: UIViewRepresentable {
let url: String
func makeUIView(context: Context) -> WKWebView {
let webViewConfig = WKWebViewConfiguration()
webViewConfig.mediaTypesRequiringUserActionForPlayback = .all
webViewConfig.allowsInlineMediaPlayback = true
return WKWebView(frame: .zero, configuration: webViewConfig)
}
func updateUIView(_ view: WKWebView, context: UIViewRepresentableContext<WebView>) {
view.load(request)
}
}
我像这样使用这个 WebView Webview(url: "YOUTUBEEMBEDVIDEOURLHERE")
,要点如下,当我第一次进入屏幕并单击播放按钮时,url 呈现一切都非常好,此时,我返回(使用 NavigationView)并进入相同再次屏幕并单击再次播放视频,然后我得到了崩溃。
崩溃信息
Error acquiring assertion: <Error Domain=RBSAssertionErrorDomain Code=3 "Required target entitlement is missing" UserInfo={RBSAssertionAttribute=<RBSDomainAttribute| domain:"com.apple.webkit" name:"Background" sourceEnvironment:"(null)">, NSLocalizedFailureReason=Required target entitlement is missing}>
[ProcessSuspension] 0x1479e9930 - ProcessAssertion: Failed to acquire RBS Background assertion 'WebProcess Background Assertion' for process with PID 60999, error: Error Domain=RBSAssertionErrorDomain Code=3 "Required target entitlement is missing" UserInfo={RBSAssertionAttribute=<RBSDomainAttribute| domain:"com.apple.webkit" name:"Background" sourceEnvironment:"(null)">, NSLocalizedFailureReason=Required target entitlement is missing}
Error acquiring assertion: <Error Domain=RBSAssertionErrorDomain Code=2 "Specified target process does not exist" UserInfo={NSLocalizedFailureReason=Specified target process does not exist}>
ProcessAssertion: Failed to acquire RBS Background assertion 'WebProcess Background Assertion' for process with PID 60999, error: Error Domain=RBSAssertionErrorDomain Code=2 "Specified target process does not exist" UserInfo={NSLocalizedFailureReason=Specified target process does not exist}
_userSettingsForUser : (null)
_WebFilterIsActive returning: NO
我尝试启用后台权限,但它没有工作
解决方案
您可以尝试使用以下实现并查看它是否有效,使用执行以下操作
WebView(request: URLRequest(url: URL(string: "https://www.youtube.com/watch?v=HTnwBT0ECAU")!)
import SwiftUI
import WebKit
struct WebView: UIViewRepresentable {
let request: URLRequest
func makeUIView(context: Context) -> WKWebView {
let wkWebView = WKWebView()
wkWebView.navigationDelegate = context.coordinator
return wkWebView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(request)
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, WKNavigationDelegate {
var webView: WebView
init(_ webView: WebView) {
self.webView = webView
}
}
}
推荐阅读
- excel - 运行时返回空白的函数未通过 2 个值之间的检查
- ruby-on-rails - 无法运行本地 Rails 服务器:ActionView::Template::Error(Webpacker 找不到应用程序...)
- flutter - Flutter 保存多个表单数据,来自另一个小部件
- linux - 如何通过linux脚本识别文件是否仍在写入或完成
- powerbi - 如何从模型摘要中建立幂次回归方程?
- json - 仅用复杂字符串替换文件中第一次出现的字符串时,Sed'ing 失败
- angular-reactive-forms - Angular Reactive Form - 未预先填充 Select 字段
- arrays - 从数组状态reactjs更改数据
- javascript - mongo 管道 $lookup 中的 $in/$eq 不起作用
- python - 使用 Perceptron sklearn.ensemble.AdaBoostClassifier() 会出错