iOS - WKWebView跨域请求仅支持HTTP。

16

嗨,我正在尝试使用WKWebView加载主要Bundle中的HTML,这在UIWebView上完美运行,但现在出现错误,HTML文件中的文件不会加载,在控制台中发送错误:“XMLHttpRequest无法加载”

控制台表单模拟器

模拟器

这是一个内嵌内容的示例http://proyectoshm.com/esferas/dosaguas/dosaguascitta.html

我的代码:

let folder = "maquetas/esferas/\(esfera)"

let resourcePath = Bundle.main.resourcePath
let subdir = URL(fileURLWithPath:resourcePath!).appendingPathComponent(folder, isDirectory: true)

guard let path = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: folder) else {
    print("no se encontró path")
    return

}
print(subdir.path)


let url = NSURL.fileURL(withPath: path)
 print(url.path)
 vistaweb = WKWebView(frame: self.view.frame)

vistaweb.loadFileURL(url, allowingReadAccessTo: subdir)

self.view.addSubview(vistaweb)

5
请尝试这样做:vistaweb.configuration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs"),该代码将允许通过文件URL访问文件。 - trungduc
1
非常好,感谢!我从来没有找到过这个。 - Hugo Fortis
1
不客气 :) - trungduc
3个回答

37

为解决此问题,您需要从 WKPreferences 中开启 allowFileAccessFromFileURLs

Swift

webView.configuration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs")

Objective-C

[webView.configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];

除了上述内容,您可能还需要使用“allowUniversalAccessFromFileURLs”。请参见我的答案。 - Abdul Yasin
1
在你的答案中添加注释,说明这是未记录的功能,可能会意外停止工作。 - Stanislav Berkov
1
似乎它在 iOS 15.6 上不再起作用了。 - gomezo

4

文件访问和通用文件访问(读取设备媒体的情况下)

[webView.configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
[webView.configuration setValue:@YES forKey:@"allowUniversalAccessFromFileURLs"];

2

针对Xamarin.iOS开发人员:

WKWebViewConfiguration config = webView.Configuration;
config.Preferences.SetValueForKey( FromObject( true ), new NSString( "allowFileAccessFromFileURLs" ) );
config.SetValueForKey( FromObject( true ), new NSString( "allowUniversalAccessFromFileURLs" ) );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接