【问题标题】:Configuring Interface Builder's new WKWebView object配置 Interface Builder 的新 WKWebView 对象
【发布时间】: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


【解决方案1】:

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

  • com.apple.security.network.server – YES
  • com.apple.security.files.user-selected.read-write - YES

删除权利文件并将其完全从项目中删除后,WKWebView 再次开始工作。

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多