Mar*_*ark 11 macos xcode blob wkwebview
我有一个WKWebView,但是当我单击具有以下URL的链接时:
blob:https://www.mycase.com/2963c6c0-24c1-418f-a314-88f7a2dbc713
Run Code Online (Sandbox Code Playgroud)
没发生什么事。阅读其中描述的文档:
从Blob读取内容的唯一方法是使用FileReader。
因此,我认为WKWebView无法通过某种方法读取Blob本身。作为URLSession失败,当你给它的BLOB URL下载内容。
我想到的一个解决方案是读取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);
Run Code Online (Sandbox Code Playgroud)
然后添加脚本消息处理程序以获取内容。
let configuration = WKWebViewConfiguration()
configuration.userContentController.add(self, name: "readBlob")
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body)
}
Run Code Online (Sandbox Code Playgroud)
这样做有点麻烦,还有其他方法吗?
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |