配置 Interface Builder 的新 WKWebView 对象

Configuring Interface Builder's new WKWebView object

有些人可能已经注意到,Apple 最近将 WKWebView(来自 WebKit)实现为 Interface Builder 中的一个对象;但是,我很难正确实施它。我仍然可以通过代码实现它,但事实证明通过 Interface Builder 实现它有点痛苦。

WKWebView 在启动时显示为空白,虽然 NSTextField 在配置后似乎可以工作,但 WKWebView 继续保持空白并且甚至不调用 didStartProvisionalNavigationdidCommitdidFinish 实施时(而以编程方式完成时,这将继续起作用)。

Interface Builder 屏幕截图

Interface Builder 菜单选项

注意: 我也曾尝试使用 WebConfiguration 来实现它,但也没有成功。现在我只是想让代码尽可能简单,以便更好地理解为什么这不起作用。

ViewController.swift

import Cocoa
import WebKit

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        // Configure Window Appearance
        window!.titlebarAppearsTransparent = true
        window!.isMovableByWindowBackground  = true
        window!.title = ""
        window!.backgroundColor = NSColor.white
    }
}

class ViewController: NSViewController, WKUIDelegate, WKNavigationDelegate {

    let myURL = "https://google.com"

    @IBOutlet var webView: WKWebView!
    @IBOutlet var pageTitle: NSTextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Load Homepage URL in WebView
        webView.load(URLRequest(url: URL(string: myURL)!))

    }
}

事实证明,当您的项目中有授权文件时,WKWebView 拒绝激活。就我而言,我使用以下设置启用了 App Sandbox:

  • com.apple.security.network.serverYES
  • com.apple.security.files.user-selected.read-writeYES

删除授权文件并将其从项目中完全移除后,WKWebView 又开始工作了。