首页 文章

在iOS 9中遇到WKWebview和UIWebView的问题

提问于
浏览
0

我对此感到非常沮丧,希望任何遇到类似问题的人都可以提供帮助 . 当前项目使用Swift 2,iOS9和XCode 7.2 . 我有ViewConroller并尝试添加UIWebView或WKWebview作为子视图,但是,UIWebView崩溃了应用程序,而我的WKWebview没有加载URL,并且没有调用任何WKNavigationDelegate方法 .

  • 首先尝试使用UIWebView,应用程序崩溃在UIWebView init与框架的行上,错误'EXC_BAD_ACCESS' . 如果我在nib中添加webview,整个应用程序在尝试使用相同的错误呈现此viewcrontroller时会崩溃 .

``

import UIKit
import WebKit

class TestViewController: UIViewController, UIWebViewDelegate {
    @IBOutlet weak var placeholderView: UIView!
    override func viewDidLoad() {
    super.viewDidLoad()
    let webV:UIWebView = UIWebView(frame: CGRectMake(0, 0, placeholderView.bounds.width, placeholderView.bounds.height))
    webV.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com")))
    webV.delegate = self;
    self.view.addSubview(webV)
    }
}

``

  • 使用WKWebview,这解决了崩溃问题,但是,它只显示一个空白视图,并且没有调用任何WKNavigationDelegate方法

``

import UIKit
import WebKit

class TestViewController: UIViewController, WKNavigationDelegate {
    @IBOutlet weak var placeholderView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let preferences = WKPreferences()
        preferences.javaScriptEnabled = false
        let webcon = WKWebViewConfiguration()
        webcon.preferences = preferences
        let webView: WKWebView = WKWebView(frame: CGRectMake(0, 0, placeholderView.bounds.width, placeholderView.bounds.height), configuration: webcon)
        webView.navigationDelegate = self
        let url = NSURL(string: "https://www.google.com")!
        placeholderView.addSubview(webView)
        placeholderView.bringSubviewToFront(webView)
        webView.loadRequest(NSURLRequest(URL: url))

    }
    func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        NSLog("Webview started Loading")
    }
    func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
        NSLog("%@", navigationAction.request.URL!)
    }

    func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
        print("\nWebview did finish load \(webView.request)", terminator: "")
    }
}

``

我已经将WebKit导入到框架工作中,添加的应用程序允许任意加载到我的info.plist中 .

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

2 回答

  • 1

    UIWebView 崩溃的原因几乎可以肯定是因为 delegate 设置为不存在的对象 .

    我猜 WKWebView 委托方法不是't called because you haven' t设置 navigationDelegate 属性(或者你做了,但你设置它的对象被解除分配 . )

  • 1

    嗯,只是尝试更改你的webView声明..在你的类中首先声明你的webView var webView: WKWebView (不要使用 let ),然后将 self.webView = WKWebView(frame: CGRectMake(0, 0, placeholderView.bounds.width, placeholderView.bounds.height), configuration: webcon) 放在viewDidLoad()中

相关问题