如何在WKWebView中读取blob数据URL?

时间:2017-07-12 18:26:07

标签: xcode macos blob wkwebview

我有一个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)
}

这样做有点麻烦,还有其他方法吗?

0 个答案:

没有答案