【发布时间】:2017-05-03 14:07:23
【问题描述】:
你们中的一些人可能已经注意到,Apple 最近将 WKWebView(来自 WebKit)实现为 Interface Builder 中的一个对象;但是,我很难正确实施它。我仍然可以通过代码实现它,但通过 Interface Builder 实现它已被证明有点痛苦。
WKWebView 在启动时显示为空白,尽管 NSTextField 在配置时似乎可以工作,但 WKWebView 继续保持空白并且在实现时甚至不调用 didStartProvisionalNavigation、didCommit 或 didFinish(而当以编程方式完成,这将继续有效)。
注意: 我也尝试过使用 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 作为库对象。您是否在启动时在控制台中收到任何错误消息?实际问题是什么 - 只是 url 没有加载吗?
-
@matt 没有错误消息,什么都没有。如果我在 viewDidLoad 中放置了一条打印语句,它会返回一条消息——但是当在 WKNavigationDelegate 的任何函数中放置一条打印语句时,都没有响应。很奇怪,但很棒的是他们最终将它添加到了 IB。
-
我无法重现任何问题。我在
viewDidLoad中尝试了self.webView.load(URLRequest(url: URL(string:"https://www.google.com")!))并加载了网页。你能不能解释一下,好像我不太聪明,问题是什么? -
另外,我在 IB 中将视图控制器设置为 Web 视图的
navigationDelegate,并且调用了委托方法decidePolicy就好了。 — 投票结束这个问题是不可重现的。 -
经过大量调试后,似乎是应用沙盒权利问题。我所拥有的只是:
com.apple.security.network.server设置为YES和com.apple.security.files.user-selected.read-write设置为YES。一旦我删除了两个布尔值并完全删除了权利文件,WKWebView 加载没有问题。然而,这是非常有问题的,因为 App Sandbox 是提交到 Mac App Store 的要求......
标签: swift xcode macos xcode8 wkwebview