Safari应用程序扩展:Popover中的WKWebKit无法加载内容

时间:2018-07-24 15:20:22

标签: swift wkwebview safari-app-extension

目标 要实现一个Safari应用程序扩展,该扩展程序显示一个带有内部WebView并显示网页的弹出窗口。

问题 弹出式窗口在Safari中正确显示,单击它会弹出一个空白的弹出式窗口。

基于控制台中的日志,viewDidLoad()消息正确显示,但弹出框为空白。我在这里做错了什么?

谢谢!

这是我的代码: SafariExtensionViewController.swift

import SafariServices
import WebKit
import os.log

class SafariExtensionViewController: SFSafariExtensionViewController, WKNavigationDelegate {

    static let shared = SafariExtensionViewController()

    var webView : WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "safari")    
        self.preferredContentSize = NSMakeSize(300, 450)
        webView = WKWebView(frame: self.view.frame)
        self.view.addSubview(webView)
        webView.navigationDelegate = self
        webView.translatesAutoresizingMaskIntoConstraints = false;

        let height = NSLayoutConstraint(item: webView, attribute: .height, relatedBy: .equal, toItem: self.view, attribute: .height, multiplier: 1, constant: 0)
        let width = NSLayoutConstraint(item: webView, attribute: .width, relatedBy: .equal, toItem: self.view, attribute: .width, multiplier: 1, constant: 0)
        self.view.addConstraints([height,width])

        let startingUrl = URL(string: "https://www.google.com")
        webView.load(URLRequest(url: startingUrl!))

        os_log("viewDidLoad() has finished.", log: log)
    }

}

2 个答案:

答案 0 :(得分:2)

发现了问题!事实证明,要使扩展访问网络,您需要转到目标->功能部分,打开应用程序沙箱并启用传出网络请求。

答案 1 :(得分:2)

如果您使用的是Safari扩展程序,则需要在扩展名.entitlements文件中添加网络请求权限。

<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>

添加这些行,对我有用。