支付宝小程序开发——踩坑实录
<p><span style="color: rgba(0, 204, 255, 1); font-size: 14px"> <strong><span style="font-family: "Microsoft YaHei""><span style="color: rgba(0, 204, 255, 1)">富文本组件直接内嵌html代码不展示、内嵌超链接点击无反应</span></span></strong></span></p><p><span style="color: rgba(0, 204, 255, 1); font-size: 14px"><span style="color: rgba(0, 204, 255, 1)"><strong><span style="font-family: "Microsoft YaHei"">非小程序前端跳转小程序无法获取页面参数</span></strong></span></span></p>
<p><span style="color: rgba(0, 204, 255, 1); font-size: 14px"> <span style="text-decoration-line: none"><strong><span style="font-family: "Microsoft YaHei""><span style="color: rgba(0, 204, 255, 1)">小程序后台生成带参数的二维码无法正常打开页面</span></span></strong></span></span></p>
<p><span style="color: rgba(0, 204, 255, 1); font-size: 14px"><span style="text-decoration-line: none"><strong><span style="font-family: "Microsoft YaHei""><span style="color: rgba(0, 204, 255, 1)">支付宝小程序中不支持concat方法</span></span></strong></span></span></p>
<p><span style="color: rgba(0, 204, 255, 1); font-size: 14px"><span style="text-decoration-line: none"><strong><span style="font-family: "Microsoft YaHei""><span style="color: rgba(0, 204, 255, 1)"> </span></span></strong></span></span></p>
<h4><span style="font-size: 14px"><strong><span style="font-size: 16px">一.富文本组件直接内嵌html代码遇到的问题:</span></strong></span></h4>
<p><strong>异常情况:</strong></p>
<ul>
<li><span style="color: rgba(255, 0, 0, 1)">内嵌html完全不展示而且没报错</span></li>
<li><span style="color: rgba(255, 0, 0, 1)">内嵌html超链接点击无反应(已加入白名单)</span></li>
</ul>
<p><strong>1.不支持超链接:</strong></p>
<p>正常的超链接点击无反应,已反映给支付宝小程序技术支持,确认bug,待修复。</p>
<p><strong>2.不支持<br>这种写法:</strong></p>
<p>需要按照严格模式编写,如非闭合标签,需要再标签内部完成闭合,不然会造成所有html都无法解析渲染。</p>
<p>注:如果html数据已经无法修改,那么也可以自己封装方法进行转换,将所有用到的需要闭合但是未闭合的但标签进行替换(替换多种标签可以根据需要编写正则表达式):</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* html代码转换(单标签一定要闭合)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
function transHtmlCode(html){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> html.replace(/<br>/g,"<br/>"<span style="color: rgba(0, 0, 0, 1)">)
}</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">调用</span>
parse(self.transHtmlCode(goods_info.remark), (err, htmlNodesRemark) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">err) {
self.setData({
htmlNodesRemark
});
}
})</span></pre>
</div>
<h4><strong><span style="font-size: 16px">二.非小程序前端——跳转小程序的链接拼接问题:</span></strong></h4>
<p><strong>异常情况:</strong></p>
<ul>
<li><span style="color: rgba(255, 0, 0, 1)"><strong>按官方文档方式拼接链接无法正常打开带有参数的页面</strong></span></li>
</ul>
<p><strong><span style="color: rgba(0, 0, 0, 1)">官方文档:</span></strong></p>
<p>官方提供的解决方法详见如何跳小程序。</p>
<p><img src="https://img2018.cnblogs.com/blog/546882/201908/546882-20190815114518692-1204853168.png" alt="" width="700"></p>
<p><strong>踩坑实操:</strong></p>
<p>如果配置的页面没有参数还好,不会出问题,如果有参数,很可能配出来的链接无法正常获取到携带参数的,坑在这里:</p>
<p>1.page参数:刚开始以为是页面path路径(也就是app.json中的路径),因为后边还有query参数,理所当然的会认为这里只需要path;</p>
<p>2.query参数:虽然看到“启动参数”四个字,但是这种路径没有配过小程序app的启动参数的,微信小程序也不是这么玩的,所以这里就理所当然的被认为是页面参数了;</p>
<p>然后拼接出来的路径是这样的:</p>
<div class="cnblogs_code">
<pre>window.location.href="alipays://platformapi/startapp?appId=xxx&page=pages/goodDetail/goodDetail&query=goods_id%3d101"</pre>
</div>
<p>很显然,这样是无法正常获取页面参数了。</p>
<p><strong>正确操作:</strong></p>
<div class="cnblogs_code">
<pre>//有页面参数(没有启动参数)<br>location.href = "alipays://platformapi/startapp?<strong><span style="color: rgba(0, 204, 255, 1)">appId=xxx</span></strong>&<span style="color: rgba(255, 102, 0, 1)"><strong>page=pages/goodDetail/goodDetail"+encodeURIComponent("?goods_id="+goods_id)</strong></span></pre>
<pre>//有页面参数,有启动参数(如渠道号、平台号等打开小程序就需要传过来的参数)<br>location.href = "alipays://platformapi/startapp?<span style="color: rgba(0, 204, 255, 1)"><strong>appId=xxx</strong></span>&<span style="color: rgba(255, 102, 0, 1)"><strong>page=pages/goodDetail/goodDetail"+encodeURIComponent("?goods_id="+goods_id)</strong></span>+&<strong><span style="color: rgba(0, 204, 255, 1)">query=encodeURIComponent("appParams="+xx)</span></strong></pre>
</div>
<p><strong>总结:</strong></p>
<p>官方文档突出了启动参数,却压根儿没提页面参数,初次接触,踩坑难免,毕竟支付宝小程序还在成长中,我们自己也得多多实践,多多尝试。</p>
<h4><span style="font-size: 16px">三.小程序后台生成带参数的二维码无法正常打开页面:</span></h4>
<p><strong>异常描述:</strong></p>
<ul>
<li><span style="color: rgba(255, 0, 0, 1)">小程序后台的码管理功能中,生成的不带参数的二维码可以正常访问,带参数的则无法正常访问页面(参数获取不到)</span></li>
</ul>
<p><strong><span style="color: rgba(0, 0, 0, 1)">踩坑实操:</span></strong></p>
<p> <img src="https://img2018.cnblogs.com/blog/546882/201908/546882-20190815175230992-1763622470.png" alt=""></p>
<p>如上,习惯性的按照开发工具自定义编译模式进行配置页面地址和参数,然后坑就出现了——总共三个配置参数:</p>
<p>页面地址——需要和 app.json pages 中的地址保持一致;</p>
<p>启动参数——很显然并不是页面参数(跟前边跳转小程序一样的问题),页面参数又被忽略了(好没有存在感的页面参数);</p>
<p>码描述——这个就不用说了。</p>
<p>按照这种方式配置,没有页面参数,自然是无法正常访问页面的了。</p>
<p><strong>正确配置:</strong></p>
<p>页面地址中填写完整页面路径,同时把页面参数也追加后边(无需转码),启动参数必填(即使没有也得填个参数),如下:</p>
<p><img src="https://img2018.cnblogs.com/blog/546882/201908/546882-20190815185304812-1308344304.png" alt=""></p>
<p>这样配置就可以了。</p>
<p><strong>拓展用法:</strong></p>
<p>小程序后台生成的二维码解码后是 <span class="cnblogs_code">https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">qr.alipay.com/s6x041d3str6e1tr35h13s</span></span> 之类的超链接,经验证,可以直接在手机浏览器中调起支付宝小程序,因此可以直接替代上边alipay协议的拼接路径,而且这种方式更直接,更简单,还不容易出错(前提是码的配置要正确,能正常访问页面)。</p>
<p><span style="font-size: 16px"><strong>四.支付宝小程序中不支持concat方法</strong></span></p>
<p>经验证,支付宝小程序中对数据进行数据追加,使用concat无效,如下demo:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> arr=
</span><span style="color: rgba(0, 0, 255, 1)">var</span> arr2=["a","b"<span style="color: rgba(0, 0, 0, 1)">]
<strong>arr.concat(arr2)</strong>
console.log(arr)</span></pre>
</div>
<p>结果输出 。</p>
<p>解决方法就是使用push方法:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> arr=
</span><span style="color: rgba(0, 0, 255, 1)">var</span> arr2=["a","b"<span style="color: rgba(0, 0, 0, 1)">]
<strong>arr.push(...arr2)</strong>
console.log(arr)</span></pre>
</div>
<p>结果输出 </p>
</div>
<div id="MySignature" role="contentinfo">
个人原创博客,转载请注明来源地址:https://www.cnblogs.com/xyyt<br><br>
来源:https://www.cnblogs.com/xyyt/p/11359546.html
頁:
[1]