我在尝试在iPad(或任何设备)上运行我的应用程序时遇到一些问题,它在模拟器上按预期运行,因此它在设备上不起作用很奇怪。我想知道是否有人可以指出我正确的方向。我花了很多时间阅读这里关于相同问题的所有其他帖子,但是没有一个建议的解决方案有效。
我有一个WKWebView,我正在加载一个本地的html文件。在模拟器上加载文件并且一切正常但在设备上我在日志中收到消息:
无法为'/'
创建沙箱扩展名以下是我将文件加载到
中的代码override func viewDidLoad() {
super.viewDidLoad()
var path = NSBundle.mainBundle().pathForResource("Login_UK",
ofType: "html")
var url = NSURL(fileURLWithPath: path!)
var request = NSURLRequest(URL: url!)
var theConfiguration = WKWebViewConfiguration()
theConfiguration.userContentController.addScriptMessageHandler(self,
name: "callbackHandler")
webView = WKWebView(frame: self.view.frame,
configuration: theConfiguration)
webView!.loadRequest(request)
self.view.addSubview(webView!)
}
非常感谢任何帮助
亲切的问候, 迪米塔尔
答案 0 :(得分:6)
感谢任何试图回答我问题的人。我已经发布这是Apple正在尝试解决的WebKit库的错误。但是我找到了一个很好的解决方法,只需要很少的工作。
我打开本地文件并读取其内容,然后将该字符串发送到webView.loadHTMLString方法,该方法编译文件中的hmtl。这样就可以避免iOS无法找到本地文件路径的问题。
以下是阅读文件然后为具有相同问题的任何人打开文件的示例:
let path2 = NSBundle.mainBundle().pathForResource("index", ofType: "html")
var text = String(contentsOfFile: path2!, encoding: NSUTF8StringEncoding, error: nil)!
webView!.loadHTMLString(text, baseURL: url)
亲切的问候, 迪米塔尔
答案 1 :(得分:2)
在启动iOS 9的loadFileURL
上有一个函数WKWebView
,显然必须在从文件URL读取数据时使用。
使用带有URLRequest的load
函数,文件网址确实在模拟器中工作,但在设备上无效 - 网页视图在设备上保持空白。使用loadFileURL
可在设备和模拟器上运行。
不幸的是,使用loadHTMLString
引入了另一个问题(在同一网页视图中跳转到另一个位置的本地锚点不再起作用),并且可能应该避免,直到Apple发布针对该问题的修复程序。
答案 2 :(得分:1)
只需执行以下操作:
if url.isFileURL {
webView.loadFileURL(url, allowingReadAccessTo: url)
} else {
let request = URLRequest(url: url)
webView.load(request)
}
答案 3 :(得分:1)
实际上,问题是由webView.load()
函数引起的,如果我们在模拟器上对其进行测试,它将可以正常工作,但是对于实际设备,它可能会引起一些问题,并且无法完美加载Webview。您可以通过调用didFinish()
函数进行检查。
您需要执行的是呼叫webView.loadFileURL()
而不是webView.load()
。它可以在模拟器和真实设备中使用。当您从本地文件目录加载任何文件时,这非常有用。
答案 4 :(得分:0)
另见WKWebView not loading local files under iOS 8关于其他解决方法的讨论,以及iOS 9的好消息