如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly
Posted
技术标签:
【中文标题】如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly【英文标题】:How to load WebAssembly in iOS app via WKWebVIew or JSC 【发布时间】:2019-08-04 17:32:39 【问题描述】:我正在尝试从基于 Swift 的 ios 应用程序中加载和执行 WebAssembly .wasm
。我第一次尝试使用javascriptCore Framework,但是当我尝试评估一个简单的脚本时,上下文中没有WebAssembly.*
模块。我能够确认 WebAssembly
不是通过 Safari 调试器控制台定义的。
然后我尝试使用 WKWebView,因为我被引导相信缺少 WebAssembly
是由于 JSC not supporting JIT,WKWebView 应该这样做。我得到了同样的结果。
这是一个在 iPhone X 12.4 模拟器上运行的简单应用,Xcode 10.3 和手动添加到项目中的 WebKit 框架。确保打开 Safari 并为 WKWebView 调试器选择“开发人员>模拟器”。
import UIKit
import WebKit
class ViewController: UIViewController
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad()
super.viewDidLoad()
@IBAction func onClick(_ sender: UIButton)
let testWasm = """
if(typeof WebAssembly !== 'undefined')
console.log("Hello, Wasm.");
else
console.log("No Wasm for you!");
"""
webView.evaluateJavaScript(testWasm)
iOS 真的有办法将 WebAssembly 加载到基于 Swift 的应用程序中吗?
【问题讨论】:
我认为是由于这个错误:bugs.webkit.org/show_bug.cgi?id=191064我只是在模拟器中测试过! 【参考方案1】:我想使用 JSC 运行一些基准测试,以将其与 Wasm3 进行比较。 基本上我遇到了同样的情况,到目前为止无法修复。
Wasm3 runs perfectly fine on iOS,目前可能满足您的需求。
目前您无法在模拟器 according to this comment 上使用 JSC 运行 WebAssembly。
【讨论】:
【参考方案2】:截至 2020 年 2 月,JavaScriptCore now has a WebAssembly interpreter 似乎是。
【讨论】:
以上是关于如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly的主要内容,如果未能解决你的问题,请参考以下文章
iOS:如何在 webview 或 wkwebview 中加载动画 webp 图像
在 iOS 中 WKWebView 的后台历史显示带有父 URL 的子 URL
如何使用 iOS 的 WKWebView 的 callAsyncJavaScript 方法?
如何在 iOS 中使用 WKWebView 将值动态传递到 iFrame