Android通过@JavascriptInterface向WebView JS传字符串返回undefined问题
问题成因
该问题和WebView JS交互机制本身没有关联,Android侧接口逻辑完全正常,问题完全由JS代码的语法作用域问题导致:
StringFromAndroid作为构造函数使用时,内部通过var string声明的是函数局部变量,仅在函数内部作用域生效,不会挂载到new关键字生成的实例对象上,因此外部访问currentString.string时属性不存在,取值为undefined。Android侧的provideAString返回值已经正确返回到JS侧,只是没有被正确存储到实例属性中。
修复方案
有两种常用修复方式,可根据业务场景选择:
方案1:保留构造函数用法,将返回值挂载到实例属性
修改StringFromAndroid的内部实现,把取值结果绑定到实例的this对象:
function StringFromAndroid(){ this.string = Android.provideAString(); }
原有调用逻辑无需修改,currentString.string即可正常获取到返回的字符串。
方案2:改为普通函数直接返回值,无需实例化
如果没有生成实例做后续扩展的需求,直接改写为普通函数返回值更简洁,无多余开销:
// 定义普通函数直接返回Android侧返回的字符串 function getStringFromAndroid(){ return Android.provideAString(); } // 调用逻辑对应修改 var currentString = getStringFromAndroid(); Android.printTheString(currentString);
补充注意:使用
addJavascriptInterface时若加载的是不可信外部网页,建议添加域名白名单限制接口调用权限,避免出现安全漏洞。
内容的提问来源于stack exchange,提问作者D. Kupra
相关产品推荐
相关产品推荐

