1.最简单的方式是通过url参数将数据传递给h5页面
android可以通过webview的loadurl()方法加载带有参数的url,h5页面可以通过解析url来获取参数值。
首先,在android端构造带有参数的url,然后加载该url到webview中:
webview webview = findviewbyid(r.id.webview); string param1 = "value1"; string param2 = "value2"; string url = " + param1 + "¶m2=" + param2; webview.loadurl(url);
在h5页面中,可以通过解析url获取参数值:
function getparameterbyname(name, url) { if (!url) url = window.location.href; name = name.replace(/[[\]]/g, "\\$&"); var regex = new regexp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeuricomponent(results[2].replace(/\+/g, " ")); } var param1 = getparameterbyname('param1'); var param2 = getparameterbyname('param2');
2.使用javascriptinterface传递参数,即h5页面调用android的方法
通过javascriptinterface在android端和h5页面之间建立桥梁,实现双向通信,即通过addjavascriptinterface()方法将一个java对象注入到webview中,h5页面可以通过该对象调用android端的方法获取参数值。
1.自定义一个myjavascriptinterface类,并且在类中实现接受到消息之后的操作和要给h5传递的数据。
2.创建myjavascriptinterface类对象,将对象传给webview.addjavascriptinterface(myjavascriptinterface, “android”)。
public class myjavascriptinterface { @javascriptinterface public string senddata(string str) { //处理从h5页面参数获取到的数据 } @javascriptinterface public string getdeviceinfo() { //h5页面调用此方法即可获取到string 类型的数据 return stationpoints; } @javascriptinterface public string getalldefect() { //给h5发送复杂数据用gson return new gson().tojson(report.getappdefectdtos()); } } webview webview = findviewbyid(r.id.webview); webview.getsettings().setjavascriptenabled(true); myjavascriptinterface myjavascriptinterface = new myjavascriptinterface(); webview.addjavascriptinterface(myjavascriptinterface, "android"); webview.loadurl()
在h5页面中可以调用android给的接口:
//发简单数据 function senddata(str){ android.senddata(str) } //h5收数据 var deviceinfo = json.parse(window.android.getdeviceinfo()); //给h5收复杂数据用json let jsondefectdata = json.parse(defectdata);
3.使用webview的evaluatejavascript方法传递参数即android调用h5的方法
在android端直接执行javascript代码,并传递参数给h5页面。
android调用了h5的calljs()方法,然后收到了一个返回值(此处的calljs方法也可携带参数进行交互)
// 假设你有一个参数叫做 paramvalue string paramvalue = "你的参数值"; // 确保参数值被正确转义,特别是如果它包含特殊字符或引号 // 在这个例子中,我们只是简单地将它用单引号括起来,但在实际情况中可能需要更复杂的转义 string javascriptcode = "javascript:calljs('" + paramvalue.replace("'", "\\'") + "');"; mwebview.evaluatejavascript(javascriptcode, new valuecallback<string>() { @override public void onreceivevalue(string value) { // 此处为 js 返回的结果 log.d("webview", "received value from javascript: " + value); } });
在h5页面中,可以定义一个receiveparams()函数来接收参数:
function calljs(param) { // 在这里使用 param 参数 console.log("received parameter from android: " + param); // ...其他代码... }
总结
到此这篇关于android传递参数给webview的h5页面的文章就介绍到这了,更多相关android传递参数给h5页面内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论