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


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 混合的构造函数和原型方式,动态原型方式
Dec 07 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
Apr 15 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
Oct 12 Javascript
json对象与数组以及转换成js对象的简单实现方法
Jun 24 Javascript
学习vue.js表单控件绑定操作
Dec 05 Javascript
解决vue打包之后静态资源图片失效的问题
Feb 21 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
Sep 21 Javascript
Node.js实现一个HTTP服务器的方法示例
May 13 Javascript
如何换个角度使用VUE过滤器详解
Sep 11 Javascript
vue中实现高德定位功能
Dec 03 Javascript
Vue中多元素过渡特效的解决方案
Feb 05 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脚本中include文件出错解决方法
2008/11/20 PHP
PHP URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
js格式化时间小结
2014/11/03 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
基于Python正确读取资源文件
2020/09/14 Python
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
股东授权委托书范本
2014/09/13 职场文书
六一儿童节开幕词
2015/01/29 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
Django实现翻页的示例代码
2021/05/24 Python