微信小程序 web-view 的 url 带参问题
在微信小程序开发过程中,会需要跳转到外部链接,微信提供了 <web-view>
组件供我们使用。
为减少重复代码,一般会将这个功能单独抽取为一个页面供大家使用:
<template>
<!--
通用 web-view
note:在iOS中,若存在JSSDK接口调用无响应的情况,可在<web-view/>的src后面加个#wechat_redirect解决
-->
<web-view :src="url"></web-view>
</template>
<script>
export default {
data() {
return {
url: ''
}
},
onLoad(options) {
this.url = options.url
}
}
</script>
** 如果上述的 url 携带了参数,那么参数需要经过encodeURIComponent
,否则微信 ios 版可能出现页面无法打开的bug。**
p.s.如果参数是一个对象,可以使用qs
这个 npm 包将参数序列化一下。
或者用这个(抄的):
querystring.js
const stringify = obj => {
if (!obj) {
return '';
} else {
return Object.keys(obj)
.sort()
.map(key => {
let val = obj[key];
if (val === undefined) {
return '';
}
if (val === null) {
return encode(key);
}
// NOTE: 如果需要传递数组,请自己和服务端商量好该如何处理
//
// if (Array.isArray(val)) {
// return val.slice().reduce((r, v) => {
// if (val2 === undefined) {
// return r;
// }
// return r.concat(encode(key) + '[]=' + encode(v));
// }, []).join('&');
// }
return encode(key) + '=' + encode(val);
})
.filter(x => {
return x.length > 0;
})
.join('&');
}
};
// NOTE: 同样没处理数组
// 问题不是需不需要数组,而是以什么样的形式来传递数组
const parse = str => {
str = str
.trim()
.replace(/^[?#&]/, '')
.replace('/+/g', ' ');
return str.split('&').reduce((r, s) => {
let i = s.indexOf('=');
let key = s.slice(0, i);
let val = i === -1 ? undefined : s.slice(i + 1);
r[key] = val === undefined ? null : decode(val);
return r;
}, {});
};
function encode(value) {
return encodeURIComponent(value);
}
function decode(value) {
return decodeURIComponent(value);
}
export default {
stringify,
parse
};
微信小程序 web-view 的 url 带参问题的更多相关文章
- 原创:微信小程序+WEB使用JS实现注册【60s】倒计时功能
1.效果图: 2.页面仅仅利用了JS的相关功能,包含:wxml.js.wxss 2.1wxml页面代码: <text>绑定手机</text> <form bindsubm ...
- 微信小程序——页面跳转及传参
小程序页面跳转 微信小程序的页面跳转依然是以传统的请求转发和请求重定向为主,tabbar的存在,有TAB页面的跳转. 为了微信小程序的简介方便,规定页面路径只能是十层,应尽量避免过多的交互方式. 1. ...
- 微信小程序html(wxml)传参
欢迎加入前端交流群交流知识:749539640 习惯了vue.angular用微信小程序有时候真感觉非人类..需要用data-xxx 先说下我们在vue.angular里事件传参 //html < ...
- 关于微信小程序获取view的动态高度填坑
wx.createSelectorQuery().select('#box').boundingClientRect(function (rect) { width = rect.width heig ...
- 微信小程序:bindtap等事件传参
事件是视图层到逻辑层的通讯方式. 事件可以将用户的行为反馈到逻辑层进行处理. 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数. 事件对象可以携带额外信息,如 id, data ...
- 微信小程序云开发-云存储-带图片的商品列表携带id跳转至商品详情
一.商品列表页 1.wxml文件 在view中添加点击事件goToGoodDetail,绑定数据data-id <!-- 添加点击事件goToGoodDetail --> <view ...
- 微信小程序 -- scroll view
效果图:横向滚动和纵向滚动 scroll view使用方法文档,前面已经介绍查找文档方法,此处不再赘述 一.横向滚动 创建一个页面scroll-nav 然后,在.wxml文件中排版 <!--水平 ...
- 【微信小程序】view顶部固定或底部固定 + scroll-view中的元素view也可以使用position:fixed;固定选中元素位置
1.顶端固定核心代码如下: <view class="page__hd" style="position:fixed; top:0;width: 750rpx;&q ...
- 微信小程序将view动态填满全屏
一.在app.js利用官方方法获取设备信息,将获取到的screenHeight.windowHeight度量单位统一由rpx换算为px 注:官方文档给出 [rpx换算px (屏幕宽度/750) ][ ...
- 微信小程序页面跳转url如何传对象参数
两步走 首先第一步:wx.navigateTo({ url:"XXX"+"¶ms="+ JSON.stringify(obj); }) 第二步获 ...
随机推荐
- Java语法 [HelloWorld]
程序代码: public class lqx {// AAAAANBBBBCKJKSLJIOQL/*请手打哦!*/ public static void main (String[] args) { ...
- Java Bug -- java.util.ConcurrentModificationException
java.util.ConcurrentModificationException at java.util.ArrayList$ArrayListIterator.next(ArrayList.ja ...
- MySQL存储过程定义中的特性(characteristic)的含义
MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程 通常在使用图形界面工具进行存 ...
- list中null或者空的区别
1.list 空 默认值是空,即没有值 null 理解为没有对list集合分配内存空间,实际上压根就不存在. 也可以这样理解: null 未建立对象 空 建立对象未放入值 例如 我有一个空着 ...
- gridView 删除一行后自动定位到指定行
/// <summary> /// 删除后定位到某一行 /// </summary> /// <param name="aCode"></ ...
- SVD及其在推荐系统中的作用
本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value d ...
- 大数据OLAP引擎对比
Presto:内存计算,mpp架构 PB级别数据 presto适合pb级的海量数据查询分析,不是说把pb的数据放进内存,比如一张pb表,查询count,vag这种有个特点,虽然数据很多,但是最终的 ...
- 244. Shortest Word Distance II 实现数组中的最短距离单词
[抄题]: Design a class which receives a list of words in the constructor, and implements a method that ...
- swift static func 和 class func
Swift中static func 相当于class final func.禁止这个方法被重写 clas func 可以被继承重写
- pushf和popf
pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标志寄存器中.