如何通过 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

在 iOS 中,当用户滚动浏览 WKWebView 时,如何检测屏幕上可见的 html 元素?

在 WKWebview 中使用本地资源