<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[木雷双雄7]]></title><description><![CDATA[代码像音符，需要码农来谱写这优美的曲子]]></description><link>https://blog.youkuaiyun.com/wlangmood</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wlangmood]]></copyright><item><title><![CDATA[fetch流式请求当 response.body 变成 undefined：淘宝 iOS WebView XHR 降级实战]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/167788583</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/167788583</guid><author>wlangmood</author><pubDate>Tue, 13 Oct 2026 10:49:47 +0800</pubDate><description><![CDATA[淘宝 iOS web-view 中 fetch 不支持 Response.body 流式读取，导致 SSE 功能失效。通过分析发现，该环境仅支持完整响应获取，无法流式处理。最终采用 XHR 的 onprogress 事件实现增量读取，并手写兼容 ReadableStream 接口的适配层，将推模式转为拉模式，实现零代码改动降级，成功复现“逐字输出”效果。]]></description><category></category></item><item><title><![CDATA[Git 版本回退操作指南]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/161885647</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/161885647</guid><author>wlangmood</author><pubDate>Thu, 11 Jun 2026 11:12:48 +0800</pubDate><description><![CDATA[本文详细介绍了Git版本回退的完整操作指南，涵盖六部分内容：1)暂存本地修改的方法；2)三种回退模式(软/混合/硬回退)及revert操作；3)暂存区与工作区状态流转；4)远程推送策略(个人/受保护分支)；5)典型场景操作流程；6)常见问题解答。重点区分了reset与revert的适用场景，推荐使用--force-with-lease代替强制推送，并针对受保护分支提供了安全回退方案。]]></description><category></category></item><item><title><![CDATA[JavaScript面试题以及解析]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/149812814</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/149812814</guid><author>wlangmood</author><pubDate>Wed, 15 Apr 2026 18:50:17 +0800</pubDate><description><![CDATA[随后执行 var name = 'Lydia' 时，才会给 name 赋值为 'Lydia'（但此时赋值在打印之后，不影响第一次输出）。let 声明的变量也会被提升，但存在暂时性死区（Temporal Dead Zone, TDZ）：在变量声明语句执行前，无法访问该变量。大多数对象都有原型，但可以通过特殊方式创建没有原型的对象，同时原型链的最顶端对象（Object.prototype）本身也没有原型。，减少代码中的逻辑错误。即使两个对象的内容完全相同，只要它们是不同的内存对象，比较结果就会是。]]></description><category></category></item><item><title><![CDATA[微信JSSDK签名错误终极踩坑指南：GET请求+SpringBoot参数截断问题全解析]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/160187713</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/160187713</guid><author>wlangmood</author><pubDate>Wed, 15 Apr 2026 18:00:59 +0800</pubDate><description><![CDATA[摘要： 微信JSSDK签名错误常见于URL带多个参数时，核心原因是GET请求中&amp;作为参数分隔符导致SpringBoot自动截断URL。本文揭示了这一现象的本质：前端传递完整URL（如含a=1&amp;b=2），但后端通过@RequestParam接收时，仅能获取第一个&amp;前的内容（a=1），造成签名校验失败。解决方案包括：1）前端对URL进行encodeURIComponent编码；2）改用POST请求传递完整URL。关键排查方法是比对前后端URL是否一致，避免手动修改URL参数。]]></description><category></category></item><item><title><![CDATA[微信小程序部分用户报错ERR_CONNECTION_REFUSED连接被拒绝]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/145342593</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/145342593</guid><author>wlangmood</author><pubDate>Fri, 24 Jan 2025 16:11:21 +0800</pubDate><description><![CDATA[部分微信小程序用户出现连接被拒绝的错误，报错信息为{"code": 0, "message": "{\"errno\":600001,\"errMsg\":\"request:fail errcode:-102 cronet_error_code:-102 error_msg:net::ERR_CONNECTION_REFUSED\"}"}既不是前端问题也不是后端问题，不要精神内耗了，如果文章对你有帮助，点赞收藏吧]]></description><category></category></item><item><title><![CDATA[axios的封装和使用]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/97242917</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/97242917</guid><author>wlangmood</author><pubDate>Thu, 25 Jul 2019 11:33:05 +0800</pubDate><description><![CDATA[目录

转载

特性

安装

引入

环境切换

设置请求超时

post请求头的设置

求拦截

响应拦截

错误处理封装

错误描述封装

跳转登录页封装

封装GET方法和POST方法

对象拼接在url上

axios的使用

转载

愣锤写的确实不错，我收益匪浅，其中我也加入了自己的一些见解。

Axios 是一个基于 promise 的 HTTP 库，可以用在浏览器和 node.j...]]></description><category></category></item><item><title><![CDATA[vue-cli 3.0安装详解]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/96973050</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/96973050</guid><author>wlangmood</author><pubDate>Tue, 23 Jul 2019 13:15:43 +0800</pubDate><description><![CDATA[全局安装@vue/cli
npm install -g @vue/cli

创建新项目
vue create project-name

1、是否使用淘宝镜像（淘宝镜像可以加快安装速度）



2、选择预设（默认/手动选择特性）

默认包含了基本的 Babel + ESLint 设置的预设



手动选择特性：



Babel：转码器，可以把ES6代码转为ES5代码

TypeScript：J...]]></description><category></category></item><item><title><![CDATA[element-ui 实战小技巧汇总]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/87970994</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/87970994</guid><author>wlangmood</author><pubDate>Wed, 27 Feb 2019 13:44:04 +0800</pubDate><description><![CDATA[一、带有删除操作的Table 表格与分页

1、表格数据只能单选

当前页currentPage，数据tableData

当前页数据只剩1条，删除数据时，需要当前页-1，然后重新刷新数据；

但当当前页为1时，不用-1，只需判断总条数是否大于10来显示与隐藏分页。


if(this.currentPage &amp;gt; 1 &amp;amp;&amp;amp; this.tableData.length == 1...]]></description><category></category></item><item><title><![CDATA[vue-cli 3.0详解以及配置webpack目录别名alias]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/87271959</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/87271959</guid><author>wlangmood</author><pubDate>Thu, 14 Feb 2019 15:07:57 +0800</pubDate><description><![CDATA[vue-cli 3.0安装


安装命令：
npm install -g @vue/cli

如果已经全局安装了旧版本的 vue-cli (1.x 或 2.x)，
卸载命令：
npm uninstall vue-cli -g

检查其版本是否正确 (3.x)：
vue --version
vue -V

创建一个新项目:
vue create hello-world

windows上的Git B...]]></description><category></category></item><item><title><![CDATA[Swiper3实现简易的大事记展示效果]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/84746083</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/84746083</guid><author>wlangmood</author><pubDate>Mon, 03 Dec 2018 16:47:18 +0800</pubDate><description><![CDATA[项目设计图：



项目实现效果：

1、年份从左到右依次递增，默认显示最后一年

2、每屏显示7个年份，点击左右按钮切换一个年份，点击年份也可随时切换

实现过程：

页面结构：


&amp;lt;div class=&quot;about3&quot;&amp;gt;
	&amp;lt;div class=&quot;about3_wrap swiper-container&quot;&amp;gt;
		&amp;lt;ul class=&quot;swiper-wrapper...]]></description><category></category></item><item><title><![CDATA[swiper3实现包含视频的轮播效果]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/83342964</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/83342964</guid><author>wlangmood</author><pubDate>Wed, 24 Oct 2018 14:38:09 +0800</pubDate><description><![CDATA[给需要添加视频的slide添加一个特有的类ban_video，来识别需要添加视频的slide。

因为我是动态添加video元素的，所以需要给slide添加视频的第一帧图片，避免加载视频带来的轮播空白问题，同时也为了撑开元素。

把视频相对定位，覆盖在图片的上面，实现图片到视频的无缝连接。

实现视频播放的逻辑：

通过判断当前slide（swiper-slide-active）是否包含ban_v...]]></description><category></category></item><item><title><![CDATA[手机端video默认全屏的兼容写法]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/81871983</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/81871983</guid><author>wlangmood</author><pubDate>Mon, 20 Aug 2018 16:22:44 +0800</pubDate><description><![CDATA[需求：希望视频播放时可以全屏播放，没有进度条、播放按钮等与系统相关的元素，视频的宽度大于高度，并自动播放

浏览器效果展示：



实现全屏：

苹果全屏兼容，属于文档内全屏

playsinline=&quot;true&quot;

x-webkit-airplay=&quot;true&quot;

webkit-playsinline=&quot;true&quot;

安卓全屏兼容，脱离文档全屏，当我退出全屏隐藏video以及外层盒子时，会有短暂...]]></description><category></category></item><item><title><![CDATA[audio音频兼容性问题小结]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/81334270</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/81334270</guid><author>wlangmood</author><pubDate>Wed, 01 Aug 2018 17:27:56 +0800</pubDate><description><![CDATA[我在页面上放一个&amp;lt;audio loop=&quot;loop&quot; src=&quot;flash/music.mp3&quot; id=&quot;media&quot; autoplay&amp;gt;&amp;lt;/audio&amp;gt;结果苹果微信端、苹果safari、UC浏览器都无法播放，我的华为荣耀8微信及内置浏览器均可播放！

首先给微信浏览器做兼容处理：


audioAutoPlay('media');
function audioAutoPl...]]></description><category></category></item><item><title><![CDATA[轮播（fade）+左右按钮点击+分页器点击+循环]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/81333130</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/81333130</guid><author>wlangmood</author><pubDate>Wed, 01 Aug 2018 16:39:46 +0800</pubDate><description><![CDATA[今天自己写了一个渐隐的轮播效果，记录一下。

轮播包括图片结构、左右按钮结构、分页器结构。

效果图



HTML


&amp;lt;div class=&quot;container&quot;&amp;gt;
    &amp;lt;div class=&quot;wrap&quot;&amp;gt;
        &amp;lt;div class=&quot;item&quot;&amp;gt;
            &amp;lt;img src=&quot;images/bnimg01.]]></description><category></category></item><item><title><![CDATA[透明遮罩在IE浏览器的兼容性—RGBA]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/79134303</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/79134303</guid><author>wlangmood</author><pubDate>Mon, 22 Jan 2018 22:46:29 +0800</pubDate><description><![CDATA[1、rgba基本能解决透明背景带来的遮罩效果：rgba(0, 0, 0, 0.5)，效果如图：


2、但是rgba在IE8及以下是不兼容的，可以使用IE滤镜处理：

filter: progid:DXImageTransform.Microsoft.Gradient(startColorstr=#7F000000, endColorstr=#7F000000);
前两位是十六进制的不]]></description><category></category></item><item><title><![CDATA[js获取地址栏上的参数]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/78621831</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/78621831</guid><author>wlangmood</author><pubDate>Fri, 24 Nov 2017 10:52:54 +0800</pubDate><description><![CDATA[1、把参数和参数值解析对象内，通过urlParse().参数获取参数值
例如：
https://www.baidu.com/?id=12345&name=b

返回的obj为：
{id: "12345", name: "b"}

function urlParse() {
  let url = window.location.search
  let obj = {}
  let ]]></description><category></category></item><item><title><![CDATA[js扩展Date将时间格式化为"yyyy-MM-dd hh:mm:ss"格式的字符串]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/78583183</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/78583183</guid><author>wlangmood</author><pubDate>Mon, 20 Nov 2017 16:20:01 +0800</pubDate><description><![CDATA[扩展Date，将时间转换为指定格式的字符串。
例如：
当前时间指定格式的格式化：
var time1 = new Date().Format("yyyy-MM-dd"); // 2017-11-20
时间戳指定格式的格式化
var time2 = new Date(1469281964000).Format("yyyy-MM-dd hh:mm:ss"); // 2016-07-23 21]]></description><category></category></item><item><title><![CDATA[vue-router动态路由详解]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/78291591</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/78291591</guid><author>wlangmood</author><pubDate>Fri, 20 Oct 2017 09:10:03 +0800</pubDate><description><![CDATA[平时做项目时遇到的点击列表页，显示详情页面，此时就需要我们传递列表唯一的标识，然后显示对应的内容。
通常做法是以“参数=值”的形式传递参数，而动态路由将参数融入到路由的路径定义之内成为路径的一部分。
在参数名称之前加“：”，然后将参数写在路由的path内。
下面是给详情页detail传递唯一标识id，从而调取详细的内容。

routes: [
    {
      path: '/',]]></description><category></category></item><item><title><![CDATA[vue-router命名路由]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/78285122</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/78285122</guid><author>wlangmood</author><pubDate>Thu, 19 Oct 2017 15:08:26 +0800</pubDate><description><![CDATA[/Home是在Router的全局配置中配置的path值。
这种显示的引用路径定义的URL一旦变更，所有引用的地方都需要改，其工作量可想而知。
但是vue-router提供了一种隐式的引用路径，即命名路由，通过路由的名称取代URL的直接引用。
因此需要给Router的全局配置进行重构：
router/index.js
import Vue from 'vue'
import Router]]></description><category></category></item><item><title><![CDATA[vue-router嵌套路由详解]]></title><link>https://blog.youkuaiyun.com/wlangmood/article/details/78269947</link><guid>https://blog.youkuaiyun.com/wlangmood/article/details/78269947</guid><author>wlangmood</author><pubDate>Wed, 18 Oct 2017 10:20:19 +0800</pubDate><description><![CDATA[嵌套路由顾名思义就是路由的多层嵌套。
结合vue-router仿天猫底部导航栏，给组件Me添加嵌套路由，也叫子路由。
总共添加两个子路由，分别命名Collection.vue（我的收藏）和Trace.vue（我的足迹）
1、重构router/index.js的路由配置，需要使用children数组来定义子路由，具体如下：

import Vue from 'vue'
import Rou]]></description><category></category></item></channel></rss>