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


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 相关文章推荐
jQuery 各种浏览器下获得日期区别
Dec 22 Javascript
jQuery EasyUI 中文API Layout(Tabs)
Apr 27 Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
Nov 13 Javascript
JS获取url链接字符串 location.href
Dec 23 Javascript
javascript控制在光标位置插入文字适合表情的插入
Jun 09 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
Dec 04 Javascript
JS实现json对象数组按对象属性排序操作示例
May 18 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
通过JS判断网页是否为手机打开
Oct 28 Javascript
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
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的魔术常量__METHOD__简介
2014/07/08 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
了解重排与重绘
2019/05/29 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
9种python web 程序的部署方式小结
2014/06/30 Python
python遍历数组的方法小结
2015/04/30 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
python 生成图形验证码的方法示例
2018/11/11 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Jupyter加载文件的实现方法
2020/04/14 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
火山动力Java笔试题
2014/06/26 面试题
新郎婚礼答谢词
2015/01/04 职场文书
党员年终个人总结
2015/02/14 职场文书
社区党支部承诺书
2015/04/29 职场文书
开学随笔
2015/08/15 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
装修安全责任协议书
2016/03/22 职场文书
pt-archiver 主键自增
2022/04/26 MySQL