0

这是在 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)
    }
}
4

1 回答 1

1

您有内存管理问题。您没有在MyObject任何地方保持对实例的强引用。一旦myFunction结束,MyObject实例就会消失,因为没有强引用。

创建instance一个属性而不是局部变量,您的问题应该得到解决。

于 2019-07-26T00:50:40.247 回答