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


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 相关文章推荐
一个选择最快的服务器转向代码
Apr 27 Javascript
JavaScript DOM 学习第五章 表单简介
Feb 19 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
Jul 31 Javascript
Mac/Windows下如何安装Node.js
Nov 22 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
js鼠标点击图片实现随机变换图片的方法
Feb 16 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
JavaScript实现自动跳转文本功能
May 25 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
Feb 13 jQuery
在Angular中使用JWT认证方法示例
Sep 10 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微信开发之音乐回复功能
2018/06/14 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
微信小程序开发背景图显示功能
2018/08/08 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
python与php实现分割文件代码
2017/03/06 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
python3代码中实现加法重载的实例
2020/12/03 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
办公室助理岗位职责
2013/12/25 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
教师读书活动心得体会
2016/01/14 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技