You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何deleteAccount事件无法触发WKScriptMessageHandler的didReceive方法?

问题原因及解决方案

核心问题:Coordinator中错误使用@Environment属性包装器

你的Coordinator类是继承自NSObject的非SwiftUI视图类,不能直接使用@Environment(\.colorScheme)属性包装器。这种错误用法会导致Coordinator实例初始化异常,进而无法正常接收WKScriptMessage回调。

修复步骤

  1. 移除Coordinator中的@Environment声明,如果需要获取配色方案,可通过makeCoordinator的context传递环境变量:

    func makeCoordinator() -> Coordinator {
        Coordinator(self, colorScheme: context.environment.colorScheme)
    }
    
    class Coordinator: NSObject, WKNavigationDelegate, WKScriptMessageHandler {
        private let colorScheme: ColorScheme
        private var parent: ContentWebView
        private var webViewNavigationSubscriber: AnyCancellable? = nil
    
        init(_ webView: ContentWebView, colorScheme: ColorScheme) {
            self.parent = webView
            self.colorScheme = colorScheme
            super.init()
        }
    
        // 其余代码保持不变
    }
    
  2. 清理多余的消息处理器注册:
    代码中注册的deleteAccount?属于多余的消息名称,建议移除避免混淆:

    // 移除该行
    // contentController.add(context.coordinator, name: "deleteAccount?")
    contentController.add(context.coordinator, name: "deleteAccount")
    
  3. 验证JavaScript调用有效性:
    在JS中添加日志,确认handleDelete函数及消息发送逻辑正常执行:

    const handleDelete = () => {
        console.log("Delete button triggered");
        if (window?.android) {
            window?.android?.clickedOnDeleteAccountBtn();
        } else {
            if (window?.webkit?.messageHandlers?.deleteAccount) {
                console.log("Sending message to iOS");
                window.webkit.messageHandlers.deleteAccount.postMessage(null);
            } else {
                console.log("deleteAccount handler not detected");
            }
        };
    };
    

额外检查点

  • 确认WebView加载页面的域名符合App的ATS设置,未被阻止执行JavaScript。
  • 确保WKWebView实例在SwiftUI视图层级中被正确保留,未被意外释放。

内容的提问来源于stack exchange,提问作者razvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:15:18