如何将Android环境变量传入WebView中loadUrl方法内的JavaScript代码
解决WebView中动态传入Android变量到JS的问题
问题原因
你拼接的JS代码里,myString作为字符串值没有被引号包裹,JS会把它识别为变量而非字符串常量,导致语法错误,所以代码无法生效。
修复方案
给myString加上单引号,确保JS解析时把它当作字符串处理:
view.loadUrl("javascript:" + "document.querySelectorAll('a').forEach(link => link.href = '" + myString + "')");
更安全的写法(避免注入风险)
如果myString包含引号、换行等特殊字符,直接拼接可能引发JS语法错误或注入风险,推荐使用WebView.evaluateJavascript()配合参数传递,这种方式更可靠:
// Android 4.4及以上版本支持 view.evaluateJavascript("(function(newHref) {" + "document.querySelectorAll('a').forEach(link => link.href = newHref);" + "})('" + myString + "')", null);
如果myString特殊字符较多,还可以用JSON格式封装参数,彻底规避拼接问题:
try { String jsonParams = new JSONObject().put("newHref", myString).toString(); view.evaluateJavascript("(function(params) {" + "document.querySelectorAll('a').forEach(link => link.href = params.newHref);" + "})(" + jsonParams + ")", null); } catch (JSONException e) { e.printStackTrace(); }
额外注意事项
- 确保WebView已启用JavaScript:
webView.getSettings().setJavaScriptEnabled(true); evaluateJavascript()相比loadUrl(),不会触发页面刷新,还能通过回调获取JS执行的返回值- 若加载本地HTML,需确认相关权限与跨域设置是否配置正确
内容的提问来源于stack exchange,提问作者Murod Khodzhaev
相关产品推荐
相关产品推荐

