これはxcode 10.3、swift 5にあります
WKWebView を使用して Web コンテンツを読み込もうとしています。WKNavigationDelegate クラスを実装する NSObject だけのクラスがあります。
- Web ビューを作成します
- ナビゲーションデリゲートを設定する
- Web ビューを読み込む
この関数を含める場合: (何でも許可)
public func webView(_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
return
}
ページは空の html 本文をロードするだけで、何も表示されません。また、関数がこの方法で呼び出されることはありません。
その関数をコメントアウトすると、ページは正常に読み込まれます。
私は困惑しています!
webview を含むクラスを UIViewController に変更してから、それをメインコントローラーに追加しようとしました。そうすることで、決定ハンドラー関数が呼び出されますが、私の webview はまだ空です。(about:blank のみを要求します)
// 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)
}
}