我有一个WKWebView,但是当我点击一个包含以下网址的链接时:
blob:https://www.mycase.com/2963c6c0-24c1-418f-a314-88f7a2dbc713
什么都没发生。阅读它所描述的documentation:
从Blob读取内容的唯一方法是使用FileReader。
所以我认为WKWebView
无法通过某种方法读取Blob本身。由于URLSession
无法在您提供blob网址时下载内容。
我自己提出的一个解决方案是用JavaScript本身读取blob。
var script = ""
script = script + "var xhr = new XMLHttpRequest();"
script = script + "xhr.open('GET', '\(navigationURL)', true);"
script = script + "xhr.responseType = 'blob';"
script = script + "xhr.onload = function(e) { if (this.status == 200) { var blob = this.response; var reader = new window.FileReader(); reader.readAsBinaryString(blob); reader.onloadend = function() { window.webkit.messageHandlers.readBlob.postMessage(reader.result); }}};"
script = script + "xhr.send();"
self.webView.evaluateJavaScript(script, completionHandler: nil);
然后添加脚本消息处理程序以获取内容。
let configuration = WKWebViewConfiguration()
configuration.userContentController.add(self, name: "readBlob")
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body)
}
这样做有点麻烦,还有其他方法吗?