- message:Error: 上传失败:网络请求错误 非法的文件,错误信息:invalid fil?
message:Error: 上传失败:网络请求错误 非法的文件,错误信息:invalid file: static/js/config.js, 1:7, SyntaxError: Unexpected identifierimport t from"@/common/config.js";const i=t.staticUrl,o=t.staticUrl;export default{appId:0,dev:"weixin",apiUrl:i,staticUrl:o}; [20231018 17:25:16][wxac8121e65155cbe4] appid: wxac8121e65155cbe4 openid: o6zAJs4GYgjuuPkKq8L2V3A0Ln1k ideVersion: 1.06.2308310 osType: win32-x64 time: 2023-10-18 17:26:38 微信小程序上传报错
2023-10-18 - 微信左上角分享成功是否有回调?
[图片] 左上角分享 成功后有回调吗?
2023-10-08 - web-view打开嵌入腾讯视频的页面提示iframe不支持引用非业务域名
现在的策略是允许公众号文章内嵌iframe,对于第三方的iframe会检查业务域名。可理解为: 1、打开公众号文章,文章内嵌iframe含有腾讯视频这种情况就是支持的。 2、打开开发者自己的业务域名,网页内嵌iframe含有腾讯视频这种情况就是不支持的。
2019-11-20 - 代码按需注入与初始渲染缓存
[视频] 你好,我是李艺。 上节课我们主要学习了自定义组件的优化技巧,这节课我们学习按需注入与初始渲染缓存。 在第一课关于启动流程的介绍中我们已经得知,第二阶段代码注入在冷启动中是不可或缺的,只有逻辑层和视图层代码全部注入,并且时间点对齐以后才会开始第三阶段首屏渲染的工作。如果这个小程序的这个代码它很大、代码很复杂,又或者用户的设备是低端机,性能不太好,这一阶段便会显著影响启动性能。 针对这个问题,小程序提供了懒加载机制,允许首屏渲染之前按需注入仅这个首屏运行所需要的一个代码,其他的代码可以在稍后用到的时候再加载和注入。下面看项目实践。 首先看实践一:按需注入 启动按需注入只需要在app.json配置文件里面添加一个lazyCodeLoading的配置,添加配置之前,小程序在首屏渲染之前,它页面所在的代码包以及主包的所有页面代码小程序都会加载并且注入,添加这个配置以后虽然相关的代码包仍在下载,但仅会加载和注入当前这个页面,它所需要用到的那些组件以及代码启用懒加载以后,在微信开发者工具的调试区可以看到相应的关于懒加载的提示,有一点我们需要注意,如果这个页面本身它比较复杂,用到了很多自定义的组件,这些自定义组件在开启按需注入这种模式以后仍然是会加载的,如果我们想进一步减少这个首屏需要注入的代码,可以在启用按需注入以后同时启用占位组件,关于占位组件,稍后我们会再详加讲解。 下面我们看实践一的代码演示。 在小程序里面启用按需注入,也就是俗称的懒加载,很简单,只需要在这个项目的app.json这个里边加一条配置就可以了,然后其他的这些工作全部是由微信完成的,我们只需要加一条配置就可以了。写一个叫做lazyLoading,当我们打一个lazy的时候它自动提示它应该填写的正确的内容, lazyCodeLoading等于requiredComponents,包括它这个值也会自动帮我们完成,其他的我们都不需要做,这个已经添加完了。现在我们单击编译按钮看一下它的一个表现,注意看在我们调试区现在多了一条打印信息:Lazy code loading is enabled告诉我们现在懒加载已经启动了,只是注入我们需要的一些组件,它有这样的一条提示,代码演示就到这里。 下面我们看实践二:静态初始渲染缓存。 前面我们使用过骨架屏,骨架屏是在这个页面完全加载以后,由微信开发者工具负责生成的一个色块状的页面结构,在运行时与骨架屏对应的还有一项技术,就是初始渲染缓存。初始渲染缓存是第一次页面运行的时候由微信客户端负责将这个页面在本地的某个区域缓存起来,下次真正的页面未加载之前,先展示缓存过的页面。初始渲染缓存又分为静态和动态两种,在这个页面配置里面只需要添加一个叫做initialRenderingCache这样的一个配置就可以启用静态缓存。静态初始缓存以页面初始的data数据与页面里面的wxml标签代码共同渲染成一个页面在本地缓存,在下一次用户访问页面的时候,不必等逻辑层代码初始化完毕它就会将缓存的页面内容先发给用户展示,在一定程度上,初始渲染缓存的页面相当于是一个静态化的本地化的骨架屏页面。 现在看实践二的代码演示。 启用渲染缓存很简单,也是加一条配置就可以了。我们打开商品详情页,它的json配置文件,我们只需要在这个里边加一条initialRenderingCache,它的值有两个,然后下面这个static代表的就是静态初始缓存,把这条配置加上然后就可以了。然后接下来我们再调一下我们编译设置,以商品详情页为启动页面进行一个测试,我们把警告信息打开以后可以看到这个地方会有一个提示,无效的page.json initialRenderingCache,提示我们这个地方有一个无效的页面配置,这个配置它其实只是在我们的微信开发者工具里面会有,如果是我们用手机测试的话,刚才我们提到了,它其实会有一条关于初始信息在这个页面成功加载之前就进行渲染的这样的一条提示。那个是我们的初始渲染缓存机制在起作用,对于我们开发者工具里面这样的一条提示,其实可以无视它,这个无关紧要的 没有关系。代码演示就到这里。 下面我们看实践三,动态初始渲染缓存。 动态初始渲染缓存与静态初始渲染缓存的不同在于配置节点的值不同,在这个页面配置里面我们添加一个initialRenderingCache等于dynamic这样的一个配置就可以启用动态缓存了,与静态初始缓存不同的是动态缓存可以指定缓存的内容。例如我们举个例子:在页面加载完成以后,通过调用setInitialRenderingCache的一个方法设置需要动态缓存的数据,这个方法的一个参数是一个dymamicData,也就是动态数据,它将与页面初始的data一起混合,然后与这个页面的wxml源码共同生成一个缓存的页面,以便下一次用户访问的时候直接去使用,并不是在本次这个页面展示的时候使用的。设置动态缓存的代码我们一定要放在 onReady周期函数里面,不能比这个时间点要早,早的话其实会影响这个页面的整体的一个渲染效率的。在微信开发者工具的模拟器里面,初始渲染缓存的一个缓存功能,刚才我们提到了会有一条黄色的无效的initialRenderingCache这样的一个配置警告信息,这个信息它不单在静态缓存里面有,在动态缓存里面其实它也有,但对于这条信息其实我们没有必要在意,我们在手机上进行测试的时候其实是没有这样一条提示的,我们可以在手机上预览商品详情页,然后关掉小程序,怎么关掉,就是在微信顶部下拉这个屏幕,在最近使用过的小程序列表里面将测试版本的小程序下拉到下方的红色区域内进行删除,当我们下一次在手机中再次预览的话就能看到这个缓存页面,但是如果你这个页面足够简单,由于它加载太快的话,这个缓存页面可能还是看不到。当然我们在调试区会看到一条提示就是Update view with init data,这个提示它其实就是我们的初始渲染缓存机制在发挥作用,并且这条提示它会在我们这个页面的onLoad事件之前就会显示出来。现在我们在屏幕上看到的这个截图就是我们手机上测试的一个截图效果。 下面我们进行实践三的代码演示。 启用动态初始渲染缓存也很简单,主要也是改配置,在我们商品详情页的json配置文件里面将它的initialRenderingCache这个节点,它的值由static改成dynamic,如果这个我们记不清的话,其实还可以借助它的自动提示功能,然后回车就可以了,这是第一步。第二步就是我们如果想加一点动态的数据作为缓存的一部分的话,可以在这个里面有一个关于swipers数据的加载,加载完成以后,在最后这个地方可以再调用它的一个叫做setInitial,这个地方没有提示对吧,第一个方法可以查文档,第二个方法可以看最终源码,我们就看一下最终源码。 这个源码里面序号跟我们实践是对应的,比如说我们第三讲的实践三对应的源码就是3.3 setInitialRenderingCache这个代码,这个地方我们可以看到 这个名字它用的其实是我们data对象里面默认的有的这个名字,然后这个数据是我们新加载到的数据,但是我们设置跟setData不一样,setData是我们设置这个页面里面,给这个页面用的,这个是给我们动态渲染缓存机制去使用的,代码设置完以后我们可以再测试一下。在调试区刚才我们提到了,仍然会看到无效的page.json initialRenderingCache这样的一个黄色的配置提示,这个没有关系 其实可以无视它。在手机上测试它这个提示其实是没有的,这个代码演示就到这里。 最后我们总结一下,按需注入是小程序的一项优化机制,只需要开发者在app.json配置文件里面加一条配置,不需要再做其他的任何事情就可以显著提升小程序的启动性能了,这条配置可以作为项目的一个默认配置进行保留,初始渲染缓存它相当于之前PC Web 2.0时代在后台自动为动态页面生成的HTML静态页面,当用户访问的时候,它发给用户的是静态页面,动态内容有更新的时候,静态页面在后台它会重新再生成一次,这是一种以空间换时间的一种优化策略,多占用一点点的内存和硬盘以争取启动时间上的一个减少。 下面我们再说一下初始渲染缓存的它的一个工作原理,在小程序启动页面的时候,尤其是小程序冷启动进入第一个页面的时候,由于逻辑层初始化的时间比较长,等到逻辑层与这个视图层全面初始化完毕再渲染出这个页面可能会看到白屏现象,这是我们不想给用户看到的,启用初始渲染缓存可以使视图层不需要等待逻辑层初始化完毕,也就是这个时候我们可以跳过逻辑层与视图层初始化完成时间点的这样的一个对齐的限制,直接提前将一个缓存的页面渲染结果展示给用户,具体的实现的流程它是这样的,在小程序页面的第一次被打开的时候,微信就将这个页面的初始渲染的结果记录下来,然后写入到一个临时的缓存区域里面,在这个页面第二次打开的时候,微信它查看缓存里面有没有这个页面,如果是有 直接就把这个页面展示给用户,但是我们要知道缓存的页面它是无法响应用户的交互事件的,需要等到这个页面真实渲染完成以后这个页面才可以正常访问,现在我们在屏幕上看到的这两个链接是我们本节课涉及到的文档链接。这节课我们就讲到这里。 这节课我们主要学习了代码的按需注入,俗称懒加载,开启方式是在app.json配置文件里面添加一个值等于requiredComponents一个lazyCodeLoading的配置节点,关于初始静态缓存,这是一种空间换时间的优化策略,它可以减少用户等待页面加载的时间,但这个缓存的页面是不能进行事件交互的,并且并不是所有的组件都支持静态缓存的,基本上我们在文档上看到所有的原生组件它都不在这个缓存之列,不在缓存之列也不会给我们带来一些错误,它只是这些组件它无法在缓存以后呈现给用户,所以初始渲染缓存只适合这个页面节点数量比较少、比较简单、内容不经常变化、用户又经常访问同时wxml节点的结构又非常简单的这样的一些入口页面去使用。 初始渲染缓存与骨架屏是同一种优化策略,本质上它们都是以空间换时间,只不过是两个不同方向的一个优化,一般而言我们用了骨架屏以后就不要再使用初始渲染缓存了。反之也是一样的,用于提供导航功能的一个首页或者是二级页面,一般适合使用初始渲染缓存,而这个页面经常变化的时候,它时效性较高的动态详情页面,这种页面它适合使用骨架屏。当然了如果这个页面想让用户尽早看到内容的话,下节课我们学习如何使用分包,独立分包以及分包预下载。 这里有一个问题请你思考一下,在多地图游戏开发里面,当用户从一个地图跳入到另外一个地图的时候,我们总是能看到一个资源加载进度条,这是游戏对地图资源加载的一种优化,这类游戏它并没有在启动的时候就开始加载所有的地图资源,而仅是在加载当前这个游戏运行所需要的一个最小的资源包,在小程序开发里面有没有这样的一种机制可以实现相似的资源加载优化效果?下节课我们就一起来探讨一下这个问题。 点击查看开放文档: 初始渲染缓存按需注入和用时注入
2022-07-14 - 关于禁止小程序JavaScript解释器使用规范要求
为进一步提升小程序的安全性和用户体验,目前平台对提审的小程序均需进行安全检测,在检测过程中,发现有小程序采用内置 JavaScript 解释器(如eval5、estime、evil-eval等)的方式,动态执行JS代码、对小程序wxml代码进行热更新。对于使用解释器的小程序,平台将自2022年7月6日开始在代码审核环节进行驳回,请各位开发者于7月6日前完成自查、修复。 具体违规案例 一、动态下发代码执行 某小程序引入JS解释器模块,在预埋场景下触发动态执行代码的逻辑,从而从服务端后台拉取要动态执行的代码或字段,在JS解释器中动态执行代码; [图片] 二、小程序页面文件热更新 下面这个例子为某小程序引入 JS 解释器模块执行小程序热更新; [图片] 三、其他情况 部分数值计算类小程序会引入解释器来执行数学表达式运算功能,对于数值计算,请使用其他方式,不得使用解释器提供的动态eval代码执行能力实现; [图片] 四、修复指引 若小程序在代码提审阶段因存在解释器被要求整改,请根据代码提审反馈,自查相应的文件,在删除相应的解释器文件后重新提交代码审核; 其他常见问题 Q1: 小程序中解释器文件是第三方包依赖引入的,这种如何处理? A1: 平台不允许开发者使用JS解释器来动态执行代码,若小程序代码中存在JS解释器逻辑,请根据小程序审核驳回细节自行移除或联系依赖提供者、服务商移除后再次提交审核; Q2: 经过自查后提交代码仍提示存在解释器,这种如何处理? A2: 请确保提交的小程序代码中不存在解释器文件以及JavaScript 代码解析模块非正常使用,若仍存在问题,请提交客服复查。
2022-06-23 - 分包异步化,分包难题不用怕
原文来自「微信开发者」公众号。 本文主要介绍了“分包异步化”新能力的原理、组件、方法和兼容性要求。 在小程序开发过程中,你是否对分包问题感到困扰? 多业务的分包难以划分分包体积膨胀下载并注入无用代码插件无法实现分包处理……为解决上述问题,微信团队提供【分包异步化】新能力,实现跨分包组件、跨分包方法,成功解决分包难、分包不合理等问题。 • • 分包异步化原理 • • 原有的分包隔离机制导致各分包之间无法引用自定义组件或逻辑代码,因此导致分包难等一系列问题。分包异步化能力打通不同分包的引用关系,解决小程序代码包合理化的问题,支持跨分包组件、跨分包方法。 [图片] • • 跨分包组件 • • 当使用其他分包组件时,代码包需要增加占位组件 (component placeholder),实现页面高效配置。例如页面展示时,分包 (subpackageB) 仍未下载,进行以下操作实现跨分包组件: 1. 使用组件 <simple-list> 代替 <list>,使用 <view> 代替 <card>,完成页面渲染 2. 完成渲染后,开始下载和注入分包 3. 完成分包下载和注入后,将占位组件替换成真正的组件 // subPackageA/pages/index.json { "usingComponents": { "button": "../../commonPackage/components/button", "list": "../../subPackageB/components/full-list", "simple-list": "../components/simple-list" }, "componentPlaceholder": { "button": "view", "list": "simple-list" } } • • 跨分包方法 • • 在小程序开发过程中,通过require回调函数或requireAsync异步调用2种方法,分包异步化能够引用其他分包的逻辑代码。具体操作如下: // subPackageA/index.js // 使用回调函数风格的调用 require('../subPackageB/utils.js', utils => { console.log(utils.whoami) // Wechat MiniProgram }) // 或者使用 Promise 风格的调用 require.async('../commonPackage/index.js').then(pkg => { pkg.getPackageName() // 'common' }) • • 兼容性要求 • • 分包异步化能力要求基础库版本 2.17.3 及以上(正式发布需在 mp 设置最低版本基础库 2.17.3)。平台能力兼容安卓微信、iOS 微信、1.05.2104272 及以上版本的微信开发者工具。更低版本的基础库兼容工作预计在一个月后完成。 • • 总结 • • 实现分包异步化能力后,主包的「公有」性质被削弱,「前置」性质显得更重要(优先于所有分包注入运行且默认注入运行)。开发者可以根据自身业务诉求,结合分包异步化,进行小程序调优,实现更快的启动速度、按需下载和注入代码包、合理处理公有组件等效果。 如有其他小程序相关问题,可在 微信小程序交流专区 中发帖互动,将有技术专员为大家解答及进行深度交流。
2022-03-24 - 微信小程序对接企业微信客服
考虑到用户会在企业的小程序里联系客服,为此支持在小程序里接入微信客服。微信小程序打开微信客服的功能已向非个人的全体小程序开放,小程序开发者在小程序管理后台处绑定同主体的微信客服(企业ID)后即可调用小程序相关接口,接入微信客服。 接入方式:https://developer.work.weixin.qq.com/document/path/94739、https://kf.weixin.qq.com/api/doc/path/94772 在微信客服管理后台获取对外的企业ID和客服链接。在小程序管理后台的【功能】【客服】【微信客服】处,填写同一主体的微信客服对应的企业ID,完成小程序和微信客服的绑定。调用「小程序打开微信客服」接口,完成接入。 注:仅可正常接入已在小程序管理后台绑定的企业ID下的微信客服 小程序管理后台-关联企业微信客服注意:企业ID必须跟该小程序的企业主体一致; 在小程序中的接入流程:https://work.weixin.qq.com/nl/act/p/a733314375294bdd 详情如下: [图片] 登录企业微信管理后台-开启微信客服功能参考:https://baijiahao.baidu.com/s?id=1735577920604728565&wfr=spider&for=pc、 https://blog.csdn.net/weixin_42065713/article/details/126137884?from_wecom=1 (1)登录【企业微信管理后台】选择【应用管理】【微信客服】,开启【微信客服】旁边的按钮; 注意:若需要后台对接客服信息的话需要开启“通过API管理微信客服”的,若不需要则不开启。 [图片] (2)然后在【客服账号】一栏点击【创建账号】来指定接待人员;创建客服账号时,企业管理员可以选择展示的视频号,设置接待人员、接待规则、接待上限、接待时间、智能回复、超时结束聊天等内容。 [图片] [图片] (3)选择【接入场景】 在这里我们选择【在微信内其他场景接入】,进入页面后点击【去接入】。企业管理员可以选择需要配置的客服账号,复制客服链接后可以配置到以下场景:在网页接入、在公众号菜单接入、在小程序接入、在搜一搜品牌官方区接入、点击微信支付凭证接入。接入后,客户点击客服入口即可发起咨询。 [图片] [图片] (4)可以在【服务工具】找到相应的配置设置客服的自动回复 [图片] 在小程序中添加打开微信客服的点击事件,调用「wx.openCustomerServiceChat」接口完成接入。 export default { methods: { // 跳转微信客服 jumpToWeChatCustomerService() { openWeChatCustomerService("https://work.weixin.qq.com/xxxxx", "wwed1ca4d3597eXXXX"); }, // 打开微信客服 openWeChatCustomerService ( weiXinCustomerServiceUrl = "", corpId = "", showMessageCard = false, sendMessageTitle = "", sendMessagePath = "", sendMessageImg = "" ) { if (!weiXinCustomerServiceUrl || !corpId) return Toast("请配置好客服链接或者企业ID"); // eslint-disable-next-line no-undef wx.openCustomerServiceChat({ // 客服信息 extInfo: { url: weiXinCustomerServiceUrl, // 客服链接 https://work.weixin.qq.com/xxxxxxxx }, corpId, // 企业ID wwed1ca4d3597eXXXX showMessageCard, // 是否发送小程序气泡消息 sendMessageTitle, // 气泡消息标题 sendMessagePath, // 气泡消息小程序路径(一定要在小程序路径后面加上“.html”,如:pages/index/index.html) sendMessageImg, // 气泡消息图片 success(res) { console.log("success", JSON.stringify(res)); }, fail(err) { console.log("fail", JSON.stringify(err)); // eslint-disable-next-line no-undef return wx.showToast({ title: err.errMsg, icon: "none" }); }, }); }, }, } 常见错误:(1)"fail" "{"errCode":1,"errMsg":"openCustomerServiceChat:fail invalid param: url"}" [图片] 原因是:属性extInfo拼错了。 解决方法:将extInfo属性名写对即可。 (2)sendMessagePath属性设置的小程序绝对路径后,在微信客服消息的气泡消息点击打开会提示“页面不存在”。 在小程序内正常访问路径如:“pages/index/index”是可以访问成功的,但如果在sendMessagePath属性设置该路径的话,在微信客服消息的气泡消息点击打开会提示“页面不存在”。 [图片] [图片] [图片] 解决方法:在小程序文件路径后面加上“.html”即可,如“pages/index/index.html”或者“/pages/index/index.html”都可 [图片]
2023-09-05 - iOS的safari浏览器中怎样拉起小程序?
现在的方案: 尝试使用URL Link的方式,后端返回wxaurl,前端 location.href = 'https://wxaurl.cn/*TICKET*' 表现: 现在safari会提示 'Safari浏览器打不开该网页,因为网址无效'。 但是如果手机上安装的有我们的某个应用(就叫做应用A吧),会提示要不要打开该应用,然后可以打开微信小程序。 这个wxaurl的地址,在iOS的扫码或者短信里边点击都是可以直接打开小程序的。 想请问下有朋友知道这是什么问题,怎么解决吗? 也尝试了URL Scheme的方式,按照文档,location.href = 'weixin://dl/business/?t= *TICKET*',是一样的表现
2022-01-14 - web-view 跳到外部链接提示 不支持打开非业务域名?
web-view组件,跳到新浪新闻提示 不支持打开非业务域名。按官方的指引,怎么把校验文件放到服务器域名根目录下,那可是人家的服务器。莫非,微信不允许跳到别人的链接,文档也没清楚说明。
2022-05-07 - 云开发入门
重磅打造的小程序学习路径课,从微信小程序到微信云开发体系化的学习,带来更加顺畅的学习体验。
2021-11-19 - wx.enableAlertBeforeUnload只有在非自定义标题栏的时候才会触发?
wx.enableAlertBeforeUnload 在非自定义标题栏时(navigationStyle为custom) 不会触发弹框 请官方帮忙看看 急!!!
2022-01-05