填上浏览器跳转app-webview,app没有接收跳转url的查询参数的坑

在iOS 2.3及以下版本,通过schema机制从浏览器跳转到App内的Webview时,URL参数丢失等号。解决方案是将等号替换为%3d或_3d以避免微信自动转换,但微信分享会额外添加参数导致问题。最终采用_3d并处理额外等号的获取查询参数函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情况说明

由于ios的2.3以前的版本在实现浏览器通过myapp://myapp/XXX的schema机制跳转到app内部使用webview打开指定页面功能时,使用了如下类似的代码片段:

String[] splits = url.queryString.split("=");
String toUrl = splits[1];

跳转时的schema如下:

myapp://myapp/webview?url=http://myhost/myhtml.html?id=7

问题就是,ios采用上述方法获取到的url其实是“http://myhost/myhtml.html?id”,丢掉了“=7”,从而h5页面没有办法获取到当前试用的编号,也就获取不到数据了。

处理方法

这里采用的处理方法是,对这个页面做特殊处理,把查询参数中的等号全部换成%3d,然后在h5页面中获取查询参数值的地方采用%3d做分割,从而跳过ios这里的坑。
也就是实际上传给ios的跳转链接变成了:http://myhost/myhtml.html?id%3d7

这样就可以保证所有的查询参数能够被完整的传给h5了。

遇到的问题

但是当遇到微信的时候,这里就有了更多的问题。

1.采用上述方案时,从app中分享该页面到微信时,微信会自动把%3d这个编码转换成=,因为两者确实是对应的。编码的对照关系可以参照这里

所以,我们不能用%3d了,这里我们改成了_3d作为替代,就没有问题了。

2.当该页面在微信中再次被分享的时候,微信会给加上from等参数,从而导致url变成了http://myhost/myhtml.html?id_3d7=&from=singlemessage&isappinstalled=1的样式。

也就是在7后边多出来一个=号,也就需要在解析的时候把=号去掉。

最终的_3d替代=场景下的获取查询参数函数

function getParamHack(name) {
    var reg = new RegExp("(^|&)" + name + "_3d([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null)
        var val = decodeURI(r[2]);
    //微信分享后会给这里添加等号
        if(val.indexOf('=') == (val.length-1)){
            val = val.substring(0,val.length-1);
        }
        return val;
    return '';
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值