配置 Interface Builder 的新 WKWebView 对象
Configuring Interface Builder's new WKWebView object
有些人可能已经注意到,Apple 最近将 WKWebView(来自 WebKit)实现为 Interface Builder 中的一个对象;但是,我很难正确实施它。我仍然可以通过代码实现它,但事实证明通过 Interface Builder 实现它有点痛苦。
WKWebView 在启动时显示为空白,虽然 NSTextField 在配置后似乎可以工作,但 WKWebView 继续保持空白并且甚至不调用 didStartProvisionalNavigation
、didCommit
或 didFinish
实施时(而以编程方式完成时,这将继续起作用)。
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.server
– YES
com.apple.security.files.user-selected.read-write
– YES
删除授权文件并将其从项目中完全移除后,WKWebView 又开始工作了。
有些人可能已经注意到,Apple 最近将 WKWebView(来自 WebKit)实现为 Interface Builder 中的一个对象;但是,我很难正确实施它。我仍然可以通过代码实现它,但事实证明通过 Interface Builder 实现它有点痛苦。
WKWebView 在启动时显示为空白,虽然 NSTextField 在配置后似乎可以工作,但 WKWebView 继续保持空白并且甚至不调用 didStartProvisionalNavigation
、didCommit
或 didFinish
实施时(而以编程方式完成时,这将继续起作用)。
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.server
–YES
com.apple.security.files.user-selected.read-write
–YES
删除授权文件并将其从项目中完全移除后,WKWebView 又开始工作了。