这是在 xcode 10.3,swift 5
我正在尝试使用 WKWebView 加载一些 Web 内容。我有一个只是 NSObject 的类,它实现了 WKNavigationDelegate 类。
- 我创建 Web 视图
- 设置导航委托
- 加载网页视图
如果我包含此功能:(允许任何内容)
public func webView(_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
return
}
该页面仅加载一个空的 html 正文,并且没有显示任何内容。此外,该函数似乎从未以这种方式调用。
如果我注释掉该功能,页面将正常加载。
我难住了!
我尝试将包含 webview 的类更改为 UIViewController,然后将其添加到主控制器。这样做,决策处理函数确实被调用,但我的 webview 仍然是空的。(它只要求关于:空白)
// simplified code
public class MyClass : NSObject, WKUIDelegate, WKNavigationDelegate {
public func load(container:UIView){
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true
config.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypes.init(rawValue: 0)
webView = WKWebView(frame:CGRect(x:0, y:0, width:250, height:250), configuration: config) // test rectangle
webView!.navigationDelegate = self
webView!.uiDelegate = self
webView!.isUserInteractionEnabled = true
container.addSubview(webView!)
let body = "<div>test</div>"
webView!.loadHTMLString(body, baseURL:URL(string:"MY_SITE_HERE"))
}
public func webView(_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
return
}
}
这是怎么发生的:我的主视图控制器有一个 NSObject 的实例,它做了以下简化:
class SDKConsumer : NSObject {
init(parentViewController:ViewController) {
self.parentViewController = parentViewController
super.init()
}
func myFunction(){
let instance = MyClass()
instance.load(container:parentViewController!.view)
}
}