WKWebView无法加载(NSViewController,OS X)

10
我尝试构建一个简单的WKWebView应用程序,用于在WebView中显示Google。 应用程序运行得非常好; 但是,一旦实现了WKWebView,该应用程序就不再显示窗口。 它只是简单地启动应用程序(在dock中),没有NSView在视线范围内。
ViewController.swift
import Cocoa
import WebKit

class ViewController: NSViewController {

    var webView: WKWebView?

    override func loadView() {
        self.webView = WKWebView()
        self.view = self.webView!

        let url = NSURL(string:"http://www.google.com/")
        let req = NSURLRequest(URL: url!)
        self.webView!.loadRequest(req)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

网上似乎没有更多的例子,GitHub 上也没有相关项目。

谢谢,我之前没有遇到过这个问题。


为你的 WKWebView 定义一个 frame,并使用 addSubview 将其添加到 self.view 中,而不是覆盖它。 - Adrien Cadet
2个回答

43

我猜测Xcode设置背后有一些限制,那些隐藏的设置会导致你的WKWebView无法工作!

你可以尝试以下方法,或许能找到解决方案:

1)通过Google搜索这些关键词,你会找到一些教程:

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

2) 检查您的项目设置面板。确保您已经勾选了网络[传入]和[传出]项目:

截图


1
我注意到一件事,似乎只有在您开始使用自动配置并将应用程序绑定到iTunes之后,才需要第二部分(App Sandbox中的传入和传出)。 在此之前,似乎可以在没有这些沙盒设置的情况下正常工作。 - Typewriter
做这个的话,它是可以工作的。但只有通过Xcode运行。如果我打开生成的“应用程序”运行它,它就不会加载任何东西,也不会报错。 - Frade
我只需要勾选“传出连接(客户端)”部分,就可以让WKWebView正常工作。我没有勾选其他选项,因为我不打算将我的应用程序作为服务器使用。这里有更多的文档资料链接 - Mr Rogers
刚刚花了大约15分钟的时间在这个问题上纠结,最后才意识到我只需要检查沙盒配置中的传入和传出连接即可......这应该真正突出显示在控制台中,类似于没有为位置服务或相机使用设置正确的隐私字符串字段。 - Stewart Thomson
太好了,谢谢...设置客户端总是一个绊脚石! - Jc Nolan
显示剩余2条评论

0

在 Xcode 14 中,我需要“出站连接”,并且还需要框架:

var webView: WKWebView!

override func loadView() {
    // these two lines are important:
    super.loadView()
    webView = WKWebView(frame:self.view.frame)

    view = webView
    
    let url = URL(string:"https://www.example.com/")!
    let req = URLRequest(url: url)
    webView.load(req)
    
    // webView.loadHTMLString("<html><body bgcolor=red><p>Hello, World!</p></body></html>", baseURL: nil)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接