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


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 相关文章推荐
js delete 用法(删除对象属性及变量)
Aug 24 Javascript
jQuery实现验证年龄简单思路
Feb 24 Javascript
js小数计算小数点后显示多位小数的实现方法
May 30 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
原生js实现网易轮播图效果
Apr 10 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
Dec 29 Javascript
jquery自定义显示消息数量
Dec 19 jQuery
Node.js使用cookie保持登录的方法
May 11 Javascript
在Angular中使用JWT认证方法示例
Sep 10 Javascript
可能被忽略的一些JavaScript数组方法细节
Feb 28 Javascript
微信小程序 调用微信授权窗口相关问题解决
Jul 25 Javascript
js实现3D粒子酷炫动态旋转特效
Sep 13 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中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
详解Python中break语句的用法
2015/05/14 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
django模板结构优化的方法
2019/02/28 Python
Python实现FM算法解析
2019/06/18 Python
python画图的函数用法以及技巧
2019/06/28 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
土地转让协议书
2014/04/15 职场文书
家庭困难证明
2014/10/12 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏