我使用 XCode 11 和 Swift 5 构建了一个非常简单的 WKWebView 应用程序。
为此,我从默认的 Hello World App 开始,从两个核心 AppDelegate 方法中删除了所有代码,并删除了 ContentView.swift 文件。
然后,我添加了一个新的类文件 ViewController.swift使用以下代码
import Cocoa
import WebKit
class ViewController: NSViewController, WKUIDelegate
{
var webView: WKWebView!
override func loadView()
{
let webConfiguration = WKWebViewConfiguration ()
webView = WKWebView (frame: CGRect(x:0, y:0, width:800, height:600), configuration:webConfiguration);
webView.uiDelegate = self ;
view = webView;
}
override func viewDidLoad()
{
super.viewDidLoad()
if let url = Bundle.main.url ( forResource: "TeamMap"
, withExtension: "html"
, subdirectory: "TM-MAC")
{
self.webView.loadFileURL ( url
, allowingReadAccessTo: url);
self.view = webView ;
}
}
}
然后,我在情节提要中添加了一个视图控制器,并将其链接到上面的 swift 文件,并将其设置为主视图控制器。
然后,我将一组文件添加到添加文件夹结构中的新文件夹TM-MAC中,其中包含以下文件
TeamMap.html
TeamMap.js
TeamMap.css
plus several other javascript and image files.
当此应用程序运行时,会出现一个窗口,可以在其中查看WKWebView,也可以使用Safari进行检查。
我发现 html 和 js 文件都已加载,但 css 文件尚未加载。我确信css文件中没有错误,因为我在另一个用Objective C编写的XCode应用程序中使用了相同的三个文件。
我在 StackOverflow 中发现了各种类似的报告,我尝试过的一件事仍然不起作用,那就是将传递给 loadFileURL/allowingReadAccessTo 的变量从 url 更改为 url.deletingLastPathComponent((
答案是在创建 Web 视图之前添加以下代码行以覆盖 func loadView((。
webConfiguration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs");