【问题标题】:WKWebView loads HTML and Javascript but fails to load CSS filesWKWebView 加载 HTML 和 Javascript 但无法加载 CSS 文件
【发布时间】:2020-05-22 19:04:45
【问题描述】:

我使用 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()

【问题讨论】:

    标签: macos wkwebview xcode11 html5-apps


    【解决方案1】:

    这个问题的答案是在创建 web 视图之前添加以下代码行来覆盖 func loadView()。

    webConfiguration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs");
    

    【讨论】:

    • 我也在使用 WKWebView,我已经从根 HTML 文件加载路径,但无法访问嵌套文件,如 .css 。我也做了你说的一样。但仍然面临问题。
    • 有没有试过把css文件放到根目录下?
    猜你喜欢
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2018-12-26
    • 2018-10-23
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多