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


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 ajax的5种状态介绍
Aug 18 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 Javascript
简单实现Vue的observer和watcher
Dec 21 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
Mar 16 Javascript
jQuery实现的点击按钮改变样式功能示例
Jul 21 jQuery
layui树形菜单动态遍历的例子
Sep 23 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
JavaScript eval()函数定义及使用方法详解
Jul 07 Javascript
vue单元格多列合并的实现
Nov 26 Vue.js
Selenium执行JavaScript脚本的方法示例
Dec 31 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制作静态网站的模板框架
2006/10/09 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
永不消失的title提示代码
2007/02/15 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
详解Python设计模式之策略模式
2020/06/15 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
计算机专业毕业生自荐信
2013/12/31 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
小学数学课后反思
2014/04/23 职场文书
幼儿发展评估方案
2014/06/11 职场文书
毕业横幅标语
2014/10/08 职场文书
社区灵活就业证明
2014/11/03 职场文书
订货会邀请函
2015/01/31 职场文书