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


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的淡入淡出可自动切换的幻灯插件
Aug 24 Javascript
JQuery动态创建DOM、表单元素的实现代码
Aug 09 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
JS中捕获console.log()输出的方法
Apr 16 Javascript
jQuery操作cookie
Aug 08 Javascript
详解vue父子组件间传值(props)
Jun 29 Javascript
js获取html页面代码中图片地址的实现代码
Mar 05 Javascript
vue实现提示保存后退出的方法
Mar 15 Javascript
vue中使用sessionStorage记住密码功能
Jul 24 Javascript
详解VUE单页应用骨架屏方案
Jan 17 Javascript
Vue实现附件上传功能
May 28 Javascript
Vue监视数据的原理详解
Feb 24 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将csv文件导入到mysql数据库的方法
2014/12/24 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
js切换光标示例代码
2013/10/10 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
Python 专题四 文件基础知识
2017/03/20 Python
Python中static相关知识小结
2018/01/02 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
Python字符串的修改方法实例
2019/12/19 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
python实现滑雪游戏
2020/02/22 Python
python实现mean-shift聚类算法
2020/06/10 Python
基于python实现删除指定文件类型
2020/07/21 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
python爬虫基础之urllib的使用
2020/12/31 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
爱牙日活动总结
2014/08/29 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python
Go timer如何调度
2021/06/09 Golang
一级电子管军用接收机测评
2022/04/05 无线电
element tree树形组件回显数据问题解决
2022/08/14 Javascript