Hybrid开发中JS怎么调用原生方法传参不生效?

Newb.志远 阅读 13

我在做Hybrid App,用WebView加载H5页面,通过window.webkit.messageHandlers.xxx.postMessage方式调用iOS原生方法。但传过去的参数在原生那边一直是undefined,明明我传的是个对象啊。

比如我这样调用:

window.webkit.messageHandlers.getUserInfo.postMessage({id: 123, name: 'test'});

原生那边收到的却是空的。是不是postMessage只能传字符串?需要手动JSON.stringify吗?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
Mc.振岚
Mc.振岚 Lv1
这个问题我遇到过,确实是传参方式的坑。先检查一下你的参数传递方式,iOS的WKWebView对参数类型要求比较严格。

不是不能传对象,而是要确保传的是合法JSON对象。你试下这样改:

// 正确传参方式
window.webkit.messageHandlers.getUserInfo.postMessage({
id: 123,
name: 'test'
});

// 或者转成JSON字符串再传
window.webkit.messageHandlers.getUserInfo.postMessage(JSON.stringify({
id: 123,
name: 'test'
}));


两种方式都可以,第一种直接传对象更常用。如果还是不行,建议:

1. 检查原生代码里是不是用错了解析方法,iOS端应该用NSDictionary或NSData接收
2. 确认WebView初始化时配置了正确的messageHandler
3. 加个try-catch看看是不是有JS报错被吞掉了

我之前有个项目就是原生那边用NSArray接收,结果死活拿不到参数,改成NSDictionary就好了。这种问题最烦人,调试半天发现是类型不匹配。
点赞
2026-03-09 12:30