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


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实现在小方框中浏览大图的代码
Aug 14 Javascript
动态为事件添加js代码示例
Feb 15 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
Sep 02 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
Bootstrap表格和栅格分页实例详解
May 20 Javascript
jquery.validate使用详解
Jun 02 Javascript
ajax接收后台数据在html页面显示
Feb 19 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 Javascript
微信小程序云开发详细教程
May 16 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
Dec 06 Javascript
vue 给数组添加新对象并赋值
Apr 20 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
第一个无线电台是由谁发明的
2021/03/01 无线电
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
jQuery选择器之子元素选择器详解
2017/09/18 jQuery
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
js正则相关知识点专题
2018/05/10 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
Python 学习教程之networkx
2019/04/15 Python
简约控的天堂:The Undone
2016/12/21 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
技校生自我鉴定范文
2013/09/26 职场文书
学校七一活动方案
2014/01/19 职场文书
公司拓展活动方案
2014/02/13 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
Ajax实现三级联动效果
2021/10/05 Javascript
2022微信温控新功能上线
2022/05/09 数码科技