微信小程序拼接图片链接无底洞深入探究


Posted in Javascript onSeptember 03, 2019

背景

由于小程序包大小限制,我们一般都会将icon存放到cdn上。现在的开发流程需要在开发测试环境下图片使用开发域名,线上使用生产域名。

问题重现

在小程序onLaunch的时候读取配置文件获取当前环境,并得到开发环境图片域名:

./app.js

const { imgHostDev, imgHostProd, env } = require('./app.config.js')
App({
 onLaunch: function () {
 this.globalData.imageHost = env == 'dev' ? imgHostDev : imgHostProd
 },
 globalData: {
 imageHost: ''
 }
})

在页面中:./pages/index/index.js

const app = getApp()

Page({
 data: {
 imgHost: ''
 },
 onLoad: function () {
 this.setData({
  imgHost: app.globalData.imageHost
 })
 }
})

./pages/index/index.wxml

<image src="{{imgHost}}/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg" mode="aspectFit"></image>

图片渲染出来了,但是在开发者工具中有报错

VM1334:1 Failed to load local image resource /4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg
the server responded with a status of 500 (HTTP/1.1 500 Internal Server Error)

手机预览就看不到图片。。。

分析

看一下报错信息,说本地不存在/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg这个文件。 也就是说页面在执行onLoad之前就已经渲染了,这个时候imgHost值为空字符串,image的src拿到的图片链接就是/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg,image标签就以为这是本地图片导致的。

修复

当然修复的方法有很多,

可以将imgHost在初始化的时候就赋值:

const app = getApp()

Page({
 data: {
 imgHost: app.globalData.imageHost
 },
 onLoad: function () {

 }
})

也可以在标签中做判断

<image src="{{imgHost ? imgHost + '/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg' : ''}}" mode="aspectFit"></image>

更多尝试

之前都是渲染网络图片,如果读取本地图片更换不同文件夹中的同名图片呢?发现也是如此。

如果图片链接里有多个变量,就建议在wxs文件中写一个方法来配置图片

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript基础第一章 JavaScript与用户端
Jul 22 Javascript
Javascript浅谈之this
Dec 17 Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
May 05 Javascript
jQuery的extend方法【三种】
Dec 14 Javascript
利用jQuery异步上传文件的插件用法详解
Jul 19 jQuery
JS非行间样式获取函数的实例代码
Jun 05 Javascript
详解vue中组件参数
Jul 09 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
Mar 19 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
Sep 21 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
Sep 02 Javascript
layui radio单选限制下一个radio单选的实例
Sep 03 #Javascript
JavaScript Array对象基本方法详解
Sep 03 #Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 #Javascript
layui 实现自动选择radio单选框(checked)的方法
Sep 03 #Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 #Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 #Javascript
Layui 动态禁止select下拉的例子
Sep 03 #Javascript
You might like
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
PHP静态文件生成类实例
2014/11/29 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
python 文件和路径操作函数小结
2009/11/23 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
浅析python函数式编程
2020/09/26 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
端口镜像是怎么实现的
2014/03/25 面试题
班级聚会策划书
2014/01/16 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
教师节演讲稿
2014/05/06 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
教师工作表现评语
2014/12/31 职场文书
会议简讯范文
2015/07/20 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
Python常遇到的错误和异常
2021/11/02 Python
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android