Cordova中从Java调用JavaScript全局函数遇问题求助
解决Cordova中Java调用JavaScript全局函数失败的问题
看起来你直接在JS里调用函数没问题,但从Java端调用就失效,大概率是调用时机、作用域或者调用方式的问题,我给你梳理几个常见的排查点:
确保在WebView加载完成后调用
Cordova的WebView需要完全加载好页面才能执行JS代码,如果你的Java代码在页面还没加载完就调用hidedOrNot,自然会失败。你可以把调用逻辑放在WebView的onPageFinished回调里,或者用Cordova提供的UI线程安全的方式执行:cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { // 这里执行JS调用逻辑 } });检查Java调用JS的语法是否正确
不同Android版本推荐的调用方式不一样,别写错了:// Android 4.4+(API 19)推荐用evaluateJavascript,支持回调获取返回值 cordova.getWebView().evaluateJavascript("hidedOrNot('Calling')", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { // 可以在这里处理JS函数的返回结果 } }); // 兼容旧版本的话用loadUrl cordova.getWebView().loadUrl("javascript:hidedOrNot('Calling')");注意参数里的引号转义,如果你的参数包含双引号,记得用
\"转义,或者直接用单引号包裹参数内容。确认JS函数是真正的全局函数
你直接在JS里调用没问题,但可能函数并没有挂载到全局的window对象上(比如在闭包或者模块里定义的)。一定要把函数暴露到全局作用域:// 明确挂载到window上,确保Java能访问到 window.hidedOrNot = function(msg) { console.log(msg); // 你的业务逻辑 };用日志排查问题
打开Android Studio的Logcat,搜索WebView或者CordovaLog相关的日志,看看有没有JS执行报错的信息。也可以在hidedOrNot函数里加console.log,然后通过命令行adb logcat CordovaLog:D *:S查看JS的输出,确认函数有没有被触发。
内容的提问来源于stack exchange,提问作者Bahu
相关产品推荐
相关产品推荐

