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


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的原理和实现技巧介绍
Nov 08 Javascript
jquery创建一个ajax关键词数据搜索实现思路
Feb 26 Javascript
浅谈JavaScript 框架分类
Nov 10 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
Feb 24 Javascript
js获取客户端操作系统类型的方法【测试可用】
May 27 Javascript
jQuery实现的瀑布流加载效果示例
Sep 13 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
Apr 07 Javascript
微信小程序picker组件两列关联使用方式
Oct 27 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中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
angular4自定义组件详解
2017/09/28 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
Python多线程学习资料
2012/12/19 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
详解python3中的真值测试
2018/08/13 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
创伤外科专业推荐信范文
2013/11/19 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
创先争优活动个人总结
2015/03/04 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
教师培训学习心得体会
2016/01/21 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
七年级作文之英语老师
2019/10/28 职场文书