【发布时间】:2022-01-01 15:32:57
【问题描述】:
早安,
我发现了一个我无法理解的有趣行为。
我有一个具有 WKWebView 的应用程序。我使用本地保存的 html 文件呈现在 webview 中。为了呈现每个视图,我为每个 html 文件设置了一个按钮。在模拟器中,当我点击每个按钮时,我可以在视图之间切换。但在实际设备中,我可以看到两个视图一次,然后卡在第二个视图上,不会变回第一个视图。
我已将此问题转移到一个新项目中,我可以在其中使用它而不会弄乱应用程序的其余部分。我在测试项目中遇到了同样的问题。
@IBOutlet weak var wec: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
wec.uiDelegate = self
// Do any additional setup after loading the view.
}
@IBAction func one() {
show_web(str: "one")
}
@IBAction func two() {
show_web(str: "two")
}
func show_web(str: String) {
var dir_name: String!
switch str {
case "one":
dir_name = "one"
case "two":
dir_name = "two"
default:
return
}
let documentDirectory = create_directory_if_needed(directory: dir_name)
let index_html_url = documentDirectory!.appendingPathComponent("index.html")
print("--------------- LOADING WEB VIEW ------------------/n",
index_html_url.path,
"--------------- LOADING WEB VIEW END ------------------/n")
let request = URLRequest(url: index_html_url)
print("???????", request)
self.wec.load(request)
}
func create_directory_if_needed(directory: String) -> URL? {
let fm = FileManager.default
let documentDirectory = fm.urls(for: .documentDirectory, in: .userDomainMask)[0]
let new_folder = documentDirectory.appendingPathComponent(directory)
if !fm.fileExists(atPath: new_folder.path) {
do {
try fm.createDirectory(at: new_folder, withIntermediateDirectories: true, attributes: nil)
}catch {
print("*********** ERROR create directory ***************")
print(error)
print("*********** ERROR End ***************")
return nil
}
}
return new_folder
}
当我打印请求时,它总是显示我想要呈现的正确路径,但它没有加载正确的路径。
--------------- 加载网络视图 ------------------/n /Users/jonasrafnsson/Library/Developer/ CoreSimulator/Devices/189C901B-CD20-4636-B176-0DCE7AED456D/data/Containers/Data/Application/CB8A2C28-3406-4162-9A6E-6C0B924F6874/Documents/two/index.html --------------- 加载网络视图结束 ------------------/n
??????? file:///Users/jonasrafnsson/Library/Developer/CoreSimulator/Devices/189C901B-CD20-4636-B176-0DCE7AED456D/data/Containers/Data/Application/CB8A2C28-3406-4162-9A6E-6C0B924F6874/Documents/two/index .html
--------------- 加载网络视图 ------------------/n /Users/jonasrafnsson/Library/Developer/ CoreSimulator/Devices/189C901B-CD20-4636-B176-0DCE7AED456D/data/Containers/Data/Application/CB8A2C28-3406-4162-9A6E-6C0B924F6874/Documents/one/index.html --------------- 加载网络视图结束 ------------------/n
??????? file:///Users/jonasrafnsson/Library/Developer/CoreSimulator/Devices/189C901B-CD20-4636-B176-0DCE7AED456D/data/Containers/Data/Application/CB8A2C28-3406-4162-9A6E-6C0B924F6874/Documents/one/index .html
以前有人见过这种行为吗?
问候, 乔纳斯
【问题讨论】:
-
什么时候复制目录中的内容,尤其是 index.html ?
-
既可以在启动时使用,也可以通过按钮按要求获取它们。这些文件从服务器下载并放置在正确的目录中。我知道它们在那里,因为当我按下按钮显示它们时它们都会出现一次。在模拟器中,每次我点击按钮时它们都会亮起。
-
我在您的代码中看到的只是您创建目录的位置(如果它不存在)。在这种情况下,没有 index.html 下载。在打开网页视图之前尝试检查 index.html 文件是否存在。您还必须假设下载文件可能需要不确定的时间。
标签: ios swift wkwebview urlrequest