<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Keystion</title>
        <link>https://webclown.net/</link>
        <description>善存于心，热爱生活。</description>
        <lastBuildDate>Fri, 26 Jun 2026 07:33:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <image>
            <title>Keystion</title>
            <url>https://webclown.net/favicon.ico</url>
            <link>https://webclown.net/</link>
        </image>
        <copyright>© 2026 Keystion</copyright>
        <atom:link href="https://webclown.net/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[电影《惊蛰无声》2024]]></title>
            <link>https://webclown.net/posts/scare-out-2024</link>
            <guid isPermaLink="false">https://webclown.net/posts/scare-out-2024</guid>
            <pubDate>Sun, 24 May 2026 02:27:52 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="豆瓣地址" tabindex="-1">豆瓣地址 <a class="header-anchor" href="#豆瓣地址" aria-label="Permalink to &quot;豆瓣地址&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://movie.douban.com/subject/37242440/" target="_blank" rel="noreferrer">https://movie.douban.com/subject/37242440/</a></p>
<h2 id="看后感" tabindex="-1">看后感 <a class="header-anchor" href="#看后感" aria-label="Permalink to &quot;看后感&quot;">&ZeroWidthSpace;</a></h2>
<p>是个犯罪悬疑片，很少这样专门发影评。感觉这个电影演员阵容挺强大的，但是拍摄手法让人看着很不舒服。</p>
<p>主要问题如下：</p>
<ol>
<li>镜头切换非常频繁，一秒钟一个人物，看得人头晕。</li>
<li>镜头一直在晃，感觉是为了悬疑而悬疑。</li>
</ol>
<p>总之，很难评。看了18分钟就关了。</p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>电影</category>
        </item>
        <item>
            <title><![CDATA[在微信小程序中引入lucide图标库]]></title>
            <link>https://webclown.net/posts/import-lucide-icon-library-in-wechat-mini-program</link>
            <guid isPermaLink="false">https://webclown.net/posts/import-lucide-icon-library-in-wechat-mini-program</guid>
            <pubDate>Wed, 04 Feb 2026 18:53:11 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="一、步骤" tabindex="-1">一、步骤 <a class="header-anchor" href="#一、步骤" aria-label="Permalink to &quot;一、步骤&quot;">&ZeroWidthSpace;</a></h2>
<p>1、把 <a href="https://github.com/lucide-icons/lucide" target="_blank" rel="noreferrer">lucide</a> 项目下载到本地；</p>
<p>2、把这个项目 <a href="https://github.com/Keystion/svg-path-outline-with-inkscape" target="_blank" rel="noreferrer">svg-path-outline-with-inkscape</a> 下载到本地；</p>
<p>3、把 lucide 项目里面的 icons 文件夹下的 svg 图片复制到 svg-path-outline-with-inkscape 项目的 src 目录下；</p>
<p>4、给 svg-path-outline-with-inkscape 项目里面的 convert.sh 执行权限；</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> convert.sh</span></span></code></pre>
</div><p>5、执行 ./convert.sh 开始转换；</p>
<p>6、打开 iconfont.cn 创建项目；</p>
<p>7、上传 svg-path-outline-with-inkscape 项目里面的 out 下的 svg 图片到项目，等审核通过；</p>
<p>8、下载到本地，解压 download.zip；</p>
<p>9、更改 iconfont.css 拓展为 iconfont.wxss，复制到小程序项目中并引用；</p>
<p>10、创建小程序组件 components/icon</p>
<p>components/icon/icon.js</p>
<div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/**</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> * Icon Component (iconfont)</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> * Usage: &#x3C;l-icon name="home" size="48" color="#059669" /></span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> */</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Component</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    properties: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        name: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            type: String,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            value: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">''</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        size: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            type: Number,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            value: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">48</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        color: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            type: String,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            value: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">''</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})</span></span></code></pre>
</div><p>components/icon/icon.json</p>
<div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "component"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "styleIsolation"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"apply-shared"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>components/icon/icon.wxml</p>
<div class="language-html vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">text</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> wx:if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"{{name}}"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> class</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"iconfont icon-{{name}}"</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    style</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"font-size: {{size}}rpx;{{color ? ' color: ' + color + ';' : ''}}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> /></span></span></code></pre>
</div><p>components/icon/icon.wxss</p>
<div class="language-css vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">css</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/* Icon Component Styles */</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.iconfont</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    display</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">inline-block</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    vertical-align</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">middle</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    line-height</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>11、配置为小程序全局组件</p>
<p>app.json</p>
<div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    "usingComponents"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">        "l-icon"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"/components/icon/icon"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">    ......</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>12、业务页面引用</p>
<div class="language-html vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">l-icon</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"log-in"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> size</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"44"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> /></span></span></code></pre>
</div><h2 id="二、q-a" tabindex="-1">二、Q&amp;A <a class="header-anchor" href="#二、q-a" aria-label="Permalink to &quot;二、Q&amp;A&quot;">&ZeroWidthSpace;</a></h2>
<p>为什么要有 <a href="https://github.com/Keystion/svg-path-outline-with-inkscape" target="_blank" rel="noreferrer">svg-path-outline-with-inkscape</a> 这个项目？</p>
<p>lucide 下载的 svg 直接上传到 iconfont 无法正常使用，提示「<strong>上传失败，请尝试将所有图层进行轮廓化</strong>」，文件太多，sketch 无法处理，需要使用 Illustrator 一个个处理不现实（不知道有没有批量操作、软件需要付费、卒），于是乎就做让 AI 写了一个批量处理的工具。</p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>inkscape</category>
            <category>lucide</category>
            <category>微信小程序</category>
        </item>
        <item>
            <title><![CDATA[解决微信开发者工具图片 404 但浏览器可正常访问的问题]]></title>
            <link>https://webclown.net/posts/wechat-develop-tool-failed-to-load-image-404</link>
            <guid isPermaLink="false">https://webclown.net/posts/wechat-develop-tool-failed-to-load-image-404</guid>
            <pubDate>Wed, 04 Feb 2026 15:22:50 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="问题现象" tabindex="-1">问题现象 <a class="header-anchor" href="#问题现象" aria-label="Permalink to &quot;问题现象&quot;">&ZeroWidthSpace;</a></h2>
<p>调试用微信开发者工具调试图片显示，控制台始终提示【图 1】的错误，但是浏览器可以正常访问【图 2】，最终是因为 ngnix 缓存问题，导致无法正常显示，实际图片确实是 404。</p>
<p><img src="https://webclown.net/assets/images/posts/2026/02-04/wechat-develop-tool-failed-to-load-image-404-1.png" alt="图 1"></p>
<p>图 1</p>
<p><img src="https://webclown.net/assets/images/posts/2026/02-04/wechat-develop-tool-failed-to-load-image-404-2.png" alt="图 2"></p>
<p>图 2</p>
<h2 id="根本原因复盘-核心雷区" tabindex="-1">根本原因复盘（核心雷区） <a class="header-anchor" href="#根本原因复盘-核心雷区" aria-label="Permalink to &quot;根本原因复盘（核心雷区）&quot;">&ZeroWidthSpace;</a></h2>
<p>上面潜在有一个坑，因为项目是测试阶段为了方便就把 upload 目录上传到 git 仓库了。github workflow 在服务器上执行构建是会先把本地更改丢失，这就是上次发版和本次发版时间段内在服务器上上传的图片，在本次发版时会把图片给删除，在加上测试 ngnix 上给图片做了缓存，图片删除了还能访问。</p>
<p>这就是多个雷区叠加到只的问题，切记该怎么做就怎么做不要走捷径。</p>
<h2 id="排查与定位方向-避坑指南" tabindex="-1">排查与定位方向（避坑指南） <a class="header-anchor" href="#排查与定位方向-避坑指南" aria-label="Permalink to &quot;排查与定位方向（避坑指南）&quot;">&ZeroWidthSpace;</a></h2>
<p>下面是排查定位问题的几个方向：</p>
<ol>
<li>微信开发者工具：菜单栏-设置-代理设置
<ul>
<li>☑️ 不使用任何代理，勾选后直连网络</li>
<li>使用系统代理</li>
<li>手动设置代理</li>
</ul>
</li>
<li>微信开发者工具：编辑器-右上角【三】详情-
<ul>
<li>☑️ 不校验合法域名、web-view（业务域名）、TLS 版本以及 HTTPS 证书</li>
</ul>
</li>
<li>Charles：Tools – Map Remote…</li>
<li>Charles： macOS Proxy</li>
<li>图片缓存
<ul>
<li>确认服务器 ngnix 是否为图片或目录设置了静态缓存，浏览器可访问，切换无痕模式再次访问试试。</li>
</ul>
</li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>微信小程序</category>
        </item>
        <item>
            <title><![CDATA[记一次宝塔迁移多个网站]]></title>
            <link>https://webclown.net/posts/baota-migrated-multiple-websites</link>
            <guid isPermaLink="false">https://webclown.net/posts/baota-migrated-multiple-websites</guid>
            <pubDate>Sun, 21 Dec 2025 03:39:10 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="教程" tabindex="-1">教程 <a class="header-anchor" href="#教程" aria-label="Permalink to &quot;教程&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://www.bt.cn/bbs/thread-42566-1-1.html" target="_blank" rel="noreferrer">宝塔一键迁移API版本 3.0版本教程 - Linux面板 - 宝塔面板论坛</a></p>
<h2 id="遇见的问题" tabindex="-1">遇见的问题 <a class="header-anchor" href="#遇见的问题" aria-label="Permalink to &quot;遇见的问题&quot;">&ZeroWidthSpace;</a></h2>
<blockquote>
<p>错误信息: 数据库[xxx]创建失败,数据库用户名或密码错误 ！请尝试重置root用户密码后再进行操作</p>
</blockquote>
<p>解决方案：</p>
<p>把旧服务器数据库密码复制并更新到新服务数据库上。</p>
<p><img src="https://webclown.net/assets/images/posts/2025/12-21/baota-migrated-multiple-websites-1.png" alt=""></p>
<p>然后再执行迁移即可。</p>
<p><img src="https://webclown.net/assets/images/posts/2025/12-21/baota-migrated-multiple-websites-2.png" alt=""></p>
<blockquote>
<p>启动 Apache 失败，查看日志报错：AH00016: Configuration Failed</p>
</blockquote>
<p>解决方案：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 移动现有的网站配置文件夹</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mv</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /www/server/panel/vhost/apache</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /www/server/panel/vhost/apache_bak</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 创建一个空的配置文件夹</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mkdir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /www/server/panel/vhost/apache</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 尝试启动 Apache</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">/etc/init.d/httpd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> start</span></span></code></pre>
</div><p>问题后记：在宝塔论坛查看并没有找到问题解决方案；尝试重装 apache（快速安装、编译安装）均无法解决。最终还是手动 Google，把 <a href="https://stackoverflow.com/questions/46330468/ah00016-configuration-failed" target="_blank" rel="noreferrer">https://stackoverflow.com/questions/46330468/ah00016-configuration-failed</a> 文章丢给 Gemini 才给出的解决方案。</p>
<h2 id="证书问题" tabindex="-1">证书问题 <a class="header-anchor" href="#证书问题" aria-label="Permalink to &quot;证书问题&quot;">&ZeroWidthSpace;</a></h2>
<p>迁移完成之后每个站点都已生成的站点 SSL 的记录。会不生效，这时候删除站点记录，重新创建站点，申请证书即可。</p>
<h2 id="后记" tabindex="-1">后记 <a class="header-anchor" href="#后记" aria-label="Permalink to &quot;后记&quot;">&ZeroWidthSpace;</a></h2>
<p>感谢 Google Gemini、宝塔。</p>
<h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://www.bt.cn/bbs/thread-42566-1-1.html" target="_blank" rel="noreferrer">宝塔一键迁移API版本 3.0版本教程</a></li>
<li><a href="https://stackoverflow.com/questions/46330468/ah00016-configuration-failed" target="_blank" rel="noreferrer">AH00016: Configuration Failed</a></li>
<li><a href="https://gemini.google/" target="_blank" rel="noreferrer">Google Gemini</a></li>
<li><a href="https://bt.cn/" target="_blank" rel="noreferrer">宝塔面板</a></li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>AH00016</category>
            <category>MySQL</category>
            <category>宝塔</category>
        </item>
        <item>
            <title><![CDATA[宝塔 Linux 面板生成阿里云 OSS 绑定域名 HTTPS 证书]]></title>
            <link>https://webclown.net/posts/baota-linux-panel-generate-aliyun-oss-binding-domain-https-certificate</link>
            <guid isPermaLink="false">https://webclown.net/posts/baota-linux-panel-generate-aliyun-oss-binding-domain-https-certificate</guid>
            <pubDate>Sun, 09 Mar 2025 14:17:06 GMT</pubDate>
            <description><![CDATA[<h2 id="背景" tabindex="-1">背景 <a class="header-anchor" href="#背景" aria-label="Permalink to &quot;背景&quot;">&ZeroWidthSpace;</a></h2>
<p>阿里云上面的【<a href="https://yundun.console.aliyun.com/?spm=5176.12818093_47.resourceCenter.7.6e6916d0vPsU37&amp;p=cas#/overview" target="_blank" rel="noreferrer">数字证书管理服务</a>】在个人测试证书由之前无限量，改为20个上限，根本不够用。然后产品升级，产品改为：个人测试证书（免费版）、个人测试证书（pro）。</p>
<p>| 对比项目 | 个人测试证书（免费版） | 个人测试证书（pro） |
|</p>
]]></description>
            <content:encoded><![CDATA[<h2 id="背景" tabindex="-1">背景 <a class="header-anchor" href="#背景" aria-label="Permalink to &quot;背景&quot;">&ZeroWidthSpace;</a></h2>
<p>阿里云上面的【<a href="https://yundun.console.aliyun.com/?spm=5176.12818093_47.resourceCenter.7.6e6916d0vPsU37&amp;p=cas#/overview" target="_blank" rel="noreferrer">数字证书管理服务</a>】在个人测试证书由之前无限量，改为20个上限，根本不够用。然后产品升级，产品改为：个人测试证书（免费版）、个人测试证书（pro）。</p>
<table tabindex="0">
<thead>
<tr>
<th>对比项目</th>
<th>个人测试证书（免费版）</th>
<th>个人测试证书（pro）</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>费用</strong></td>
<td>免费</td>
<td>68 元/张</td>
</tr>
<tr>
<td><strong>证书服务周期</strong></td>
<td>仅支持3个月（即证书的有效期是3个月，过期后必须重新申请和安装证书，运维管理成本高）</td>
<td>SSL签发后有效期为12个月，且提供托管服务（在证书即将过期时，自动提交新证书的申请），支持最长3年的服务周期</td>
</tr>
<tr>
<td><strong>支持的证书类型</strong></td>
<td>DV</td>
<td>DV</td>
</tr>
<tr>
<td><strong>人工客服支持</strong></td>
<td>不支持</td>
<td>支持</td>
</tr>
<tr>
<td><strong>支持保护的网站域名类型</strong></td>
<td>仅支持保护一个单域名。不支持后缀为特殊词的域名申请免费证书。</td>
<td>仅支持保护一个单域名。不支持后缀为特殊词的域名申请免费证书。</td>
</tr>
</tbody>
</table>
<p>免费用完了，换个思路，既然再用宝塔在维护网站，也支持生成SSL证书，开整。</p>
<h2 id="方案流程" tabindex="-1">方案流程 <a class="header-anchor" href="#方案流程" aria-label="Permalink to &quot;方案流程&quot;">&ZeroWidthSpace;</a></h2>
<p>涉及到4个产品：</p>
<ol>
<li>宝塔Linux面板、</li>
<li>阿里云云解析DNS（其他也行）</li>
<li>阿里云对象存储 OSS</li>
<li>阿里云数字证书管理服务</li>
</ol>
<h2 id="一、生成宝塔linux面板生成ssl证书" tabindex="-1">一、生成宝塔Linux面板生成SSL证书 <a class="header-anchor" href="#一、生成宝塔linux面板生成ssl证书" aria-label="Permalink to &quot;一、生成宝塔Linux面板生成SSL证书&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>DNS：增加目标域名。如：s1.webclown.net，A记录，值为服务器IP。</li>
<li>宝塔：网站-创建新站点（PHP类型）</li>
<li>宝塔：网站-站点列表-新站点-设置-SSL-申请证书</li>
<li>宝塔：申请证书，成功之后<strong>不部署</strong>，下载证书。</li>
</ol>
<h2 id="二、把证书绑定到阿里云对象存储-oss" tabindex="-1">二、把证书绑定到阿里云对象存储 OSS <a class="header-anchor" href="#二、把证书绑定到阿里云对象存储-oss" aria-label="Permalink to &quot;二、把证书绑定到阿里云对象存储 OSS&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>宝塔：暂停站点</li>
<li>DNS：把刚刚新增的A记录暂停解析。</li>
<li>阿里云：数字证书管理服务 – SSL证书管理 – 上传证书 – 选择刚刚下载的证书</li>
<li>阿里云：对象存储OSS – 选择对应的Bucket – Bucket设置 – 域名管理 – 新增域名</li>
<li>阿里云：对象存储OSS – 新增域名
<ul>
<li>阿里云云解析
<ul>
<li>输入域名，绑定</li>
<li>开启自动添加CNAME解析即可</li>
</ul>
</li>
<li>其他服务商
<ul>
<li>增加对应的TXT记录即可</li>
</ul>
</li>
</ul>
</li>
<li>阿里云：对象存储OSS – 域名列表 – 证书托管 – 选择对应的证书即可。</li>
</ol>
<p>至此配置成功。</p>
<h2 id="总结" tabindex="-1">总结 <a class="header-anchor" href="#总结" aria-label="Permalink to &quot;总结&quot;">&ZeroWidthSpace;</a></h2>
<p>免费是昂贵的，这些折腾下来几个小时过去了。这只是记录一个方案，如果你恰好想要用这种方案，也是可以的。</p>
<p>BTW，也可以把这套整成一个解决方案，变成一个Flow。</p>
<p><img src="https://webclown.net/assets/images/posts/2025/03-09/baota-linux-panel-generate-aliyun-oss-binding-domain-https-certificate-1.png" alt=""></p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>SSL</category>
            <category>宝塔Linux</category>
            <category>阿里云OSS</category>
        </item>
        <item>
            <title><![CDATA[使用Rclone把阿里云ECS文件同步到阿里云对象存储OSS]]></title>
            <link>https://webclown.net/posts/use-rclone-to-sync-aliyun-ecs-files-to-aliyun-oss</link>
            <guid isPermaLink="false">https://webclown.net/posts/use-rclone-to-sync-aliyun-ecs-files-to-aliyun-oss</guid>
            <pubDate>Fri, 21 Feb 2025 00:44:26 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="背景" tabindex="-1">背景 <a class="header-anchor" href="#背景" aria-label="Permalink to &quot;背景&quot;">&ZeroWidthSpace;</a></h2>
<p>需要把大约 25G 的图片、视频文件同步到阿里云对象存储OSS。</p>
<h2 id="解决方案" tabindex="-1">解决方案 <a class="header-anchor" href="#解决方案" aria-label="Permalink to &quot;解决方案&quot;">&ZeroWidthSpace;</a></h2>
<p>1、安装 Rclone</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> curl https://rclone.org/install.sh </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> bash</span></span></code></pre>
</div><p>2、配置 Rclone</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> rclone config</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">No</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remotes</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> found,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> new</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> one?</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">n</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) New remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">s</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Set configuration password</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">q</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Quit config</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">n/s/q</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">n</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> new</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remote.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">webclown-net</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Storage.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> of</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storage</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> configure.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Choose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> number</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> below,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> own</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 1Fichier</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (fichier)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Akamai</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> NetStorage</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (netstorage)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Alias</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> an</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> existing</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (alias)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Amazon</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> S3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Compliant</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Storage</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Providers</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> including</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> AWS,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Alibaba,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ArvanCloud,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Ceph,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ChinaMobile,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Cloudflare,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> DigitalOcean,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Dreamhost,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> GCS,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> HuaweiOBS,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> IBMCOS,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> IDrive,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> IONOS,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> LyveCloud,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Leviia,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Liara,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Linode,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Magalu,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Minio,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Netease,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Outscale,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Petabox,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> RackCorp,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Rclone,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Scaleway,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> SeaweedFS,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Selectel,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> StackPath,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Storj,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Synology,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> TencentCOS,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Wasabi,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Qiniu</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> and</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> others</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (s3)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 5</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Backblaze</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> B2</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">....</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Storage</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">4</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> provider.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Choose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> S3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> provider.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Choose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> number</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> below,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> own</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Press</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> empty.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Amazon</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Web</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Services</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (AWS) S3</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (AWS)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Alibaba</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Cloud</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Object</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Storage</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> System</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (OSS) formerly Aliyun</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (Alibaba)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Arvan</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Cloud</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Object</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Storage</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (AOS)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (ArvanCloud)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Ceph</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Object</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Storage</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (Ceph)</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">...</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">provider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> env_auth.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> AWS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> credentials</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> runtime</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (environment </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">variables</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> EC2/ECS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> meta</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> data</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> if</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> no</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> env</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vars</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Only</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> applies</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> if</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> access_key_id</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> and</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> secret_access_key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> blank.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Choose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> number</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> below,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> own</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> boolean</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (true </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">or</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Press</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (false).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> AWS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> credentials</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> next</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> step.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (false)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> AWS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> credentials</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> environment</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (env </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">vars</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> IAM</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (true)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">env_auth</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> access_key_id.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">AWS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Access</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ID.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> blank</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> anonymous</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> access</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> runtime</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> credentials.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value.</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Press</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> empty.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">access_key_id</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">8888888888888</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> secret_access_key.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">AWS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Secret</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Access</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (password).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> blank</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> anonymous</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> access</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> runtime</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> credentials.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value.</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Press</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> empty.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">secret_access_key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">Xxxxxxxxxxxxxxxxxxxx</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> endpoint.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Endpoint</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> OSS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> API.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Choose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> number</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> below,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> own</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Press</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> empty.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Global</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Accelerate</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (oss-accelerate.aliyuncs.com)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Global</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Accelerate</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (outside </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">mainland</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> China</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (oss-accelerate-overseas.aliyuncs.com)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> East</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> China</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (Hangzhou)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (oss-cn-hangzhou.aliyuncs.com)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> East</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> China</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (Shanghai)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (oss-cn-shanghai.aliyuncs.com)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 5</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> North</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> China</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (Qingdao)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (oss-cn-qingdao.aliyuncs.com)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 6</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> North</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> China</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (Beijing)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (oss-cn-beijing.aliyuncs.com)</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">...</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">endpoint</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">6</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> acl.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Canned</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ACL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> used</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> when</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> creating</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> buckets</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> and</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storing</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> copying</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> objects.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">This</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ACL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> used</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> for</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> creating</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> objects</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> and</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> if</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> bucket_acl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> isn't set, for creating buckets too.</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">Note that this ACL is applied when server-side copying objects as S3</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">doesn't</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> copy</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ACL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> source</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> but</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rather</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> writes</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> fresh</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> one.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">If</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> acl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> an</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> empty</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> string</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> then</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> no</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> X-Amz-Acl:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> header</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> added</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> and</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">the</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (private) will be used.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Choose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> number</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> below,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> own</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Press</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> empty.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Owner</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gets</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> FULL_CONTROL.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> No</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> one</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> else</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> has</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> access</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> rights</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (default).</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">....</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">acl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Option</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storage_class.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">The</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storage</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> class</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> use</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> when</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storing</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> new</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> objects</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> OSS.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Choose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> number</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> below,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> your</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> own</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> value.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Press</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Enter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> leave</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> empty.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Default</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ()</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Standard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storage</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> class</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (STANDARD)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 3</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Archive</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storage</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mode</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (GLACIER)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Infrequent</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> access</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> storage</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mode</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">   \</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (STANDARD_IA)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">storage_class</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Edit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> advanced</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> config?</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">y</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Yes</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">n</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) No (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">y/n</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">n</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Configuration</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> complete.</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Options:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> type:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> s3</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> provider:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Alibaba</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> access_key_id:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 8888888888888</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> secret_access_key:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Xxxxxxxxxxxxxxxxxxxx</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> endpoint:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> oss-cn-beijing.aliyuncs.com</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Keep</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> this</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "webclown-net"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remote?</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">y</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Yes this is OK (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">e</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Edit this remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">d</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Delete this remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">y/e/d</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">y</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Current</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> remotes:</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                 Type</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">====</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                 ====</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">webclown-net</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        s3</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">e</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Edit existing remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">n</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) New remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">d</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Delete remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">r</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Rename remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">c</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Copy remote</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">s</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Set configuration password</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">q</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) Quit config</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">e/n/d/r/c/s/q</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">> </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">q</span></span></code></pre>
</div><p>Done。接下来是同步命令：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> rclone sync /www/wwwroot/www.webclown.net/uploadfile/202201 webclown-net:webclown-net/uploadfile/202202 --progress --transfers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">1</span></span></code></pre>
</div><ul>
<li>--progress：显示进度。</li>
<li>--transfers：使用线程上传，根据服务器带宽来配置。</li>
</ul>
<h2 id="其他-阿里云官方工具ossutil" tabindex="-1">其他：阿里云官方工具ossutil <a class="header-anchor" href="#其他-阿里云官方工具ossutil" aria-label="Permalink to &quot;其他：阿里云官方工具ossutil&quot;">&ZeroWidthSpace;</a></h2>
<p>使用的是「<a href="https://help.aliyun.com/zh/oss/developer-reference/install-ossutil2" target="_blank" rel="noreferrer">命令行工具ossutil 2.0（预览版）</a>」，同步速度有点慢，均速在 600 kb/s 左右。传到猴年马月了。所以尝试Rclone。</p>
<p>同步命令：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ossutil cp -r /www/wwwroot/www.webclown.net/uploadfile/202201 oss://webclown-net/uploadfile/202201</span></span></code></pre>
</div><h2 id="链接" tabindex="-1">链接 <a class="header-anchor" href="#链接" aria-label="Permalink to &quot;链接&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://rclone.org" target="_blank" rel="noreferrer">Rclone</a></li>
<li><a href="https://help.aliyun.com/zh/oss/developer-reference/ossutil-overview/" target="_blank" rel="noreferrer">阿里云OSS：命令行工具ossutil 2.0（预览版）</a></li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>ossutil</category>
            <category>Rclone</category>
            <category>阿里云ECS</category>
            <category>阿里云OSS</category>
        </item>
        <item>
            <title><![CDATA[将 iPhone/iPad 照片导出/备份到电脑]]></title>
            <link>https://webclown.net/posts/export-backup-iphone-ipad-photos-to-computer</link>
            <guid isPermaLink="false">https://webclown.net/posts/export-backup-iphone-ipad-photos-to-computer</guid>
            <pubDate>Thu, 16 Jan 2025 08:30:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="苹果电脑" tabindex="-1">苹果电脑 <a class="header-anchor" href="#苹果电脑" aria-label="Permalink to &quot;苹果电脑&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>打开「 <img src="https://webclown.net/assets/images/posts/2025/01-16/export-backup-iphone-ipad-photos-to-computer-1.png" alt=""> 照片.app 」；</li>
<li>选择照片；</li>
<li>菜单栏：文件 – 导出 – 导出 n 张照片；
<ul>
<li><img src="https://webclown.net/assets/images/posts/2025/01-16/export-backup-iphone-ipad-photos-to-computer-2.png" alt="导出照片"></li>
</ul>
</li>
<li>选择导出照片配置
<ul>
<li>照片
<ul>
<li>照片种类：HEIC</li>
<li>颜色描述文件：原始状态</li>
<li>大小：实际到小</li>
</ul>
</li>
<li>信息
<ul>
<li>包括：标题、关键词和说明及位置信息</li>
</ul>
</li>
<li>文件命名
<ul>
<li>文件名称：使用文件名称</li>
<li>子文件夹格式：无</li>
</ul>
</li>
<li><img src="https://webclown.net/assets/images/posts/2025/01-16/export-backup-iphone-ipad-photos-to-computer-3.png" alt="选择导出照片配置"></li>
</ul>
</li>
<li>导出到指定文件夹</li>
<li>查看导出进度
<ul>
<li><img src="https://webclown.net/assets/images/posts/2025/01-16/export-backup-iphone-ipad-photos-to-computer-4.png" alt="导出进度"></li>
</ul>
</li>
</ol>
<h2 id="windows" tabindex="-1">Windows <a class="header-anchor" href="#windows" aria-label="Permalink to &quot;Windows&quot;">&ZeroWidthSpace;</a></h2>
<p>可以是用 iTunes 导出。</p>
<p><a href="https://support.apple.com/zh-cn/118290" target="_blank" rel="noreferrer">下载 Windows 版 iTunes – 官方 Apple 支持 (中国)</a></p>
<h2 id="其他平台-通用方法" tabindex="-1">其他平台（通用方法） <a class="header-anchor" href="#其他平台-通用方法" aria-label="Permalink to &quot;其他平台（通用方法）&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>使用网页端登录
<ul>
<li><a href="https://www.icloud.com.cn" target="_blank" rel="noreferrer">https://www.icloud.com.cn</a></li>
<li><a href="https://www.icloud.com" target="_blank" rel="noreferrer">https://www.icloud.com</a></li>
</ul>
</li>
<li>找到 「照片」，选择照片下载（每次最多可下载1000项，图片为：JPG，视频为：MOV）
<ul>
<li><img src="https://webclown.net/assets/images/posts/2025/01-16/export-backup-iphone-ipad-photos-to-computer-5.png" alt="iCloud 导出图片"></li>
</ul>
</li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>iOS</category>
            <category>iPad</category>
            <category>iPhone</category>
            <category>macOS</category>
        </item>
        <item>
            <title><![CDATA[HBuilderX – 发布App错误集合]]></title>
            <link>https://webclown.net/posts/hbuilderx-release-app-error-collection</link>
            <guid isPermaLink="false">https://webclown.net/posts/hbuilderx-release-app-error-collection</guid>
            <pubDate>Wed, 18 Dec 2024 22:22:39 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="error-provisioning-profile-doesn-t-support-the-associated-domains" tabindex="-1">[Error] Provisioning profile doesn't support the Associated Domains <a class="header-anchor" href="#error-provisioning-profile-doesn-t-support-the-associated-domains" aria-label="Permalink to &quot;[Error] Provisioning profile doesn't support the Associated Domains&quot;">&ZeroWidthSpace;</a></h2>
<div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>[Info] begin copyFile files to ipa…</span></span>
<span class="line"><span>[Info] begin replace files to ipa…</span></span>
<span class="line"><span>[Info] begin update mobileprovision to ipa…</span></span>
<span class="line"><span>[Info] begin outPut t_entitlements_full plist file…</span></span>
<span class="line"><span>[Info] begin outPut outPutEntitlements plist file…</span></span>
<span class="line"><span>[Info] begin verifyPlistFiles</span></span>
<span class="line"><span>[Error] Provisioning profile doesn't support the Associated Domains</span></span>
<span class="line"><span>[Error] Provisioning profile doesn't include the com.apple.developer.associated-domains</span></span>
<span class="line"><span>[Error] verifyPlistFiles failed</span></span>
<span class="line"><span>[Info] Package make result:Failed. Reason:</span></span></code></pre>
</div><p>错误原因：《Apple Developer Program 许可协议》已更新</p>
<p>登录 <a href="https://appstoreconnect.apple.com/" target="_blank" rel="noreferrer">App Store Connect</a> 同意《Apple Developer Program 许可协议》，即可</p>
<p><img src="https://webclown.net/assets/images/posts/2024/12-18/hbuilderx-release-app-error-collection-1.png" alt=""></p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>HBuilderX</category>
            <category>uniapp</category>
        </item>
        <item>
            <title><![CDATA[为什么 中文 不 需要 空格]]></title>
            <link>https://webclown.net/posts/why-does-not-chinese-need-spaces</link>
            <guid isPermaLink="false">https://webclown.net/posts/why-does-not-chinese-need-spaces</guid>
            <pubDate>Thu, 12 Sep 2024 15:59:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>今天在朋友圈看了一篇关于中文要不要加空格的文章，觉得挺有意思的。</p>
<p>这篇文章探讨了为什么中文不需要空格的原因。主要观点如下：</p>
<blockquote>
<p>中文是一种典型的表意书写系统，每个汉字表示一个音节或语素。中文文本由连续的汉字组成，不同的词之间没有用空格分隔。大多数中文词可以用一到两个汉字表示，词长较短且变化较小。因此，中文读者在阅读时容易预测词的长度，从而更快识别词的开始和结束位置，即中文词边界位置的不确定性较小。</p>
</blockquote>
<p>中文词边界位置的不确定性较小，无需空格来标记词边界。</p>
<blockquote>
<p>相比之下，英语单词往往由多个字母组成，且词长的变化较大，这使得英语读者较难预测每个单词的开始和结束位置，即英语词边界位置的不确定性较大。因此，英语倾向于使用空格以减少词切分的认知负担。</p>
</blockquote>
<p>英语词边界位置的不确定性较大，需要空格来标记词边界。</p>
<p>总之，中文和英语采用不同的词边界标记方式，都是为了实现更经济高效的阅读。</p>
<p>原文：<a href="https://mp.weixin.qq.com/s/AL66AhcLjGbyEnbNvyJ2FA" target="_blank" rel="noreferrer">为什么 中文 不 需要 空格</a></p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>词边界</category>
        </item>
        <item>
            <title><![CDATA[ERROR  [nuxt] [request error] [unhandled] [500] fetch failed]]></title>
            <link>https://webclown.net/posts/error-nuxt-request-error-unhandled-500-fetch-failed</link>
            <guid isPermaLink="false">https://webclown.net/posts/error-nuxt-request-error-unhandled-500-fetch-failed</guid>
            <pubDate>Wed, 24 Apr 2024 15:19:52 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="error-nuxt-request-error-unhandled-500-fetch-failed" tabindex="-1">ERROR  [nuxt] [request error] [unhandled] [500] fetch failed <a class="header-anchor" href="#error-nuxt-request-error-unhandled-500-fetch-failed" aria-label="Permalink to &quot;ERROR  [nuxt] [request error] [unhandled] [500] fetch failed&quot;">&ZeroWidthSpace;</a></h2>
<div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> ERROR</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  [nuxt] [request error] [unhandled] [500] fetch failed</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  at</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Object.fetch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (node:internal/deps/undici/undici:11118:11)  </span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  at</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> process.processTicksAndRejections</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (node:internal/process/task_queues:95:5)  </span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  at</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> async</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sendProxy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:1157:20)  </span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  at</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> async</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:1962:19</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  </span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  at</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> async</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Object.callAsync</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (./node_modules/.pnpm/unctx@2.3.1/node_modules/unctx/dist/index.mjs:72:16)  </span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  at</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> async</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Server.toNodeHandle</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:2249:7)</span></span></code></pre>
</div><p>触发此错误代码</p>
<p>demo.vue</p>
<div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">async foo() {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  const resData = await useFetch(`/api/good/1`, {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    method: 'DELETE',</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>nuxt.config.ts</p>
<div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> defineNuxtConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  nitro: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    routeRules: {</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">      "/api/**"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        proxy: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">env</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">NUXT_API_URL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}api/**`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><h2 id="临时解决方案" tabindex="-1">临时解决方案 <a class="header-anchor" href="#临时解决方案" aria-label="Permalink to &quot;临时解决方案&quot;">&ZeroWidthSpace;</a></h2>
<p>把请求方式改为 <code>POST</code> 请求。</p>
<div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">async foo() {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  const resData = await useFetch(`/api/good/1`, {</span></span>
<span class="line highlighted"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    method: 'POST',</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>网上有说是这些情况：</p>
<ol>
<li>代理域名 <code>http</code>、<code>https</code> 的问题，测试过不是这个问题，和域名无关。
<ol>
<li>排查域名请求日志，出现此问题时，请求日志没有记录，说明请求没有到达后端，是前端请求问题。</li>
<li>尝试改下请求方式，发现 <code>POST</code> 请求正常，<code>DELETE</code> 请求报错，也许是请求方式问题，但是不确定，先临时解决一下。</li>
</ol>
</li>
<li>降级 <code>h3@1.9.0</code> 版本，降级后，问题依然存在。</li>
<li>降级 <code>nuxt@3.10.3</code> 版本，降级后，问题依然存在。</li>
</ol>
<h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://kwokronny.com/post/9/%E5%9F%BA%E4%BA%8Enitro%E7%9A%84Nuxt3%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%97%A0%E6%B3%95%E8%AF%B7%E6%B1%82https%EF%BC%8C%E9%9A%BE%E9%81%93%E6%98%AF%E6%88%91%E5%86%99%E9%94%99%E4%BA%86%EF%BC%9F" target="_blank" rel="noreferrer">基于nitro的Nuxt3服务端无法请求https，难道是我写错了？</a></li>
<li><a href="https://github.com/unjs/h3/issues/376" target="_blank" rel="noreferrer">[nuxt] [request error] [unhandled] [500] using <code>proxyRequest</code> or <code>sendProxy</code> · Issue #376 · unjs/h3</a></li>
<li><a href="https://github.com/nuxt/nuxt/issues/26318" target="_blank" rel="noreferrer">Nuxt v3.11.0 proxyRequest in server api routes makes nitro crash if proxy server is down · Issue #26318 · nuxt/nuxt</a></li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Nuxt</category>
        </item>
        <item>
            <title><![CDATA[印象笔记导出Markdown]]></title>
            <link>https://webclown.net/posts/export-markdown-from-evernote</link>
            <guid isPermaLink="false">https://webclown.net/posts/export-markdown-from-evernote</guid>
            <pubDate>Thu, 04 Jan 2024 10:19:17 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="解决方案" tabindex="-1">解决方案 <a class="header-anchor" href="#解决方案" aria-label="Permalink to &quot;解决方案&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>
<p>确认印象笔记版本 <code>9.5.10</code>。</p>
</li>
<li>
<p>导出笔记：</p>
<ol>
<li>方式一：全选笔记导出为 <code>.enex</code> 格式。</li>
<li>方式二：选择笔记本导出为 <code>.enex</code> 格式。</li>
</ol>
</li>
<li>
<p><code>.enex</code> 格式转换为 <code>.md</code> 格式</p>
<p><strong>方式一：</strong></p>
<p>使用 <code>evernote2md</code> 工具将 <code>.enex</code> 格式转换为 <code>.md</code> 格式。</p>
<div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">evernote2md</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 我的笔记.enex</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ./output</span></span></code></pre>
</div><p><strong>方式二：</strong><a href="https://github.com/akosbalasko/yarle" target="_blank" rel="noreferrer">yarle</a></p>
</li>
<li>
<p>done。</p>
</li>
</ol>
<p>获取印象笔记 <code>9.5.10</code> 版本安装包：</p>
<p>链接：<a href="https://pan.quark.cn/s/dc30a92ff0c6" target="_blank" rel="noreferrer">https://pan.quark.cn/s/dc30a92ff0c6</a></p>
<p>提取码：<code>jVuH</code></p>
<h2 id="背景" tabindex="-1">背景 <a class="header-anchor" href="#背景" aria-label="Permalink to &quot;背景&quot;">&ZeroWidthSpace;</a></h2>
<p>已经不在使用印象笔记有几年，打算把笔记导出来，以备后用（会吗？）。</p>
<p>印象笔记为国内版，国际版为 <code>Evernote</code>。国内版的笔记从 <code>9.5.10</code> 版本之后是无法导出为 <code>.enex</code> 格式的，只能导出 <code>.notes</code> 和 <code>.html</code> 格式，<code>.notes</code> 还是加密的（<code>encoding=&quot;base64:aes&quot;</code>），国际版可以正常导出 <code>.enex</code> 格式。 <a href="https://github.com/wormi4ok/evernote2md" target="_blank" rel="noreferrer">evernote2md</a> 可以将 <code>.notes</code> 格式转换为 <code>.md</code> 格式。</p>
<ul>
<li>方案1：<code>.notes</code> + <code>evernote2md</code> 🙅</li>
<li>方案2：<code>.html</code> + <a href="https://gitee.com/mayungitee990405/evernote_move" target="_blank" rel="noreferrer">evernote_move</a> 🙅</li>
<li>方案3：<code>.enex</code> + <code>evernote2md</code> ✅</li>
<li>方案4：<code>.enex</code> + <a href="https://github.com/akosbalasko/yarle" target="_blank" rel="noreferrer">yarle</a> ✅</li>
</ul>
<p>方案4 <code>yarle</code> 优点，支持导出多种软件使用的Markdown格式（<a href="https://github.com/akosbalasko/yarle?tab=readme-ov-file#to-where-can-i-import-the-converted-notes" target="_blank" rel="noreferrer">更多</a>），如：</p>
<ul>
<li>Obsidian</li>
<li>LogSeq</li>
<li>Tana</li>
<li>Heptabase</li>
</ul>
<h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://github.com/wormi4ok/evernote2md" target="_blank" rel="noreferrer">wormi4ok/evernote2md - Github</a></li>
<li><a href="https://github.com/akosbalasko/yarle" target="_blank" rel="noreferrer">akosbalasko/yarle - Github</a></li>
<li><a href="https://www.penghh.fun/2022/07/28/2022-7-28-yinxiang/" target="_blank" rel="noreferrer">印象笔记导出格式更新，enex变为notes，恶心行为+1</a></li>
<li><a href="https://blog.csdn.net/qq_43851684/article/details/130837780" target="_blank" rel="noreferrer">印象笔记导出HTML再转markdown的方法_印象笔记导出markdown-CSDN博客</a></li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>印象笔记</category>
            <category>Markdown</category>
            <category>evernote2md</category>
        </item>
        <item>
            <title><![CDATA[2023年终总结]]></title>
            <link>https://webclown.net/posts/2023-year-end-summary</link>
            <guid isPermaLink="false">https://webclown.net/posts/2023-year-end-summary</guid>
            <pubDate>Mon, 01 Jan 2024 00:17:20 GMT</pubDate>
            <content:encoded><![CDATA[<blockquote>
<p>以前也没有这个习惯，只有工作上的述职。也慢慢尝试着写一写，让自己有个记录，也算是给自己一个交代。</p>
</blockquote>
<p>经历了裁员，从3月底一临云离职12月初的稳定，也算曲曲折折。虽然有些事情是可遇见的，但是还是缺少真正的行动。感谢家人的支持和理解，感谢朋友提供的帮助。</p>
<p>把 <code>Vue3</code>、<code>TS</code>、<code>Tailwind CSS</code> 应用到项目中。</p>
<p>博客从 Hexo 迁移到 VitePress，整理了一些历史项目，做下归档。</p>
<p>做了一个 Chrome 插件：<a href="https://chromewebstore.google.com/detail/bffmbfheegbbogkmjdhhmcaaljgaapol" target="_blank" rel="noreferrer">自动生成二维码</a>。</p>
<p>做了一个 Visual Studio Code 插件：<a href="https://marketplace.visualstudio.com/items?itemName=YantaoShang.markdown-code-blocks" target="_blank" rel="noreferrer">Markdown Code Blocks - Visual Studio Marketplace</a>。</p>
<p>在博客记录了 16 篇文章，也只能说是记录，算不算写，技术深度不够，内容不够丰富，还需努力。</p>
<p>买了一辆雅迪电动车 🛵，通勤相对方便了一些。</p>
<p>连续三四年的忙碌，身体素质下降，体重增加，比往年锻炼多了一下，跑步 33 次，骑行 11 次，总里程 228km，<a href="https://workouts.webclown.net/" target="_blank" rel="noreferrer">Workouts - Webclown.net</a>。</p>
<p>读了很少的书，汗颜 😓。</p>
<p>较之前稍微关注了家庭方面的事情，但是还是不够，还需努力，更多的去关心家人。</p>
<h2 id="_2024年计划" tabindex="-1">2024年计划 <a class="header-anchor" href="#_2024年计划" aria-label="Permalink to &quot;2024年计划&quot;">&ZeroWidthSpace;</a></h2>
<p>多看书，多思考，利用好时间，慢慢学习长期投资。</p>
<p>注意休息，少熬夜，多锻炼，多运动，多关心家人。</p>
<p>儿童家庭教育方面需要多多用心，多学学，减轻老婆的负担，尽可能为孩子提供更好的教育。</p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>年终</category>
        </item>
        <item>
            <title><![CDATA[在prettier3项目中替代pretty-quick]]></title>
            <link>https://webclown.net/posts/replace-pretty-quick-in-prettier-3-project</link>
            <guid isPermaLink="false">https://webclown.net/posts/replace-pretty-quick-in-prettier-3-project</guid>
            <pubDate>Tue, 19 Dec 2023 11:32:11 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="解决方案" tabindex="-1">解决方案 <a class="header-anchor" href="#解决方案" aria-label="Permalink to &quot;解决方案&quot;">&ZeroWidthSpace;</a></h2>
<p><code>.husky/pre-commit</code> 中添加以下内容</p>
<div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 获取暂存区的文件列表</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">FILES</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> diff</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --cached</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --name-only</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --diff-filter=ACMR</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> sed</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 's| |\\ |g'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-z</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$FILES</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ] &#x26;&#x26; </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">exit</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 美化所有暂存区的文件</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$FILES</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> xargs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ./node_modules/.bin/prettier</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --ignore-unknown</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> --write</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 将修改/美化的文件添加回暂存</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$FILES</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> xargs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span></span></code></pre>
</div><h2 id="背景" tabindex="-1">背景 <a class="header-anchor" href="#背景" aria-label="Permalink to &quot;背景&quot;">&ZeroWidthSpace;</a></h2>
<p>在 prettier v3.x 版本的项目中，使用 <code>pretty-quick</code> 会报错：</p>
<div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">..</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">./isSupportedExtension.js:12</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  ..</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">._prettier.resolveConfig.sync</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">file,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">                             ^</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">TypeError:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> _prettier.resolveConfig.sync</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> is</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> not</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> function</span></span></code></pre>
</div><p>可以降低 <code>prettier</code> 版本到 <code>2.x</code> 来解决这个问题，但是项目里面额外使用了 <code>tailwindcss</code>，而 <code>tailwindcss</code> 依赖的 <code>postcss</code> 依赖的 <code>prettier</code> 版本是 <code>3.x</code>，所以降低 <code>prettier</code> 版本不是一个好的解决方案。</p>
<h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://prettier.io/docs/en/precommit.html" target="_blank" rel="noreferrer">Pre-commit Hook · Prettier</a></li>
<li><a href="https://github.com/azz/pretty-quick/issues/164" target="_blank" rel="noreferrer">pretty-quick will break with prettier v3 · Issue #164 · azz/pretty-quick</a></li>
<li><a href="https://tailwindcss.com/docs/editor-setup" target="_blank" rel="noreferrer">Editor Setup - Tailwind CSS</a></li>
<li><a href="https://github.com/tailwindlabs/prettier-plugin-tailwindcss" target="_blank" rel="noreferrer">tailwindlabs/prettier-plugin-tailwindcss: A Prettier plugin for Tailwind CSS that automatically sorts classes based on our recommended class order.</a></li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>prettier</category>
        </item>
        <item>
            <title><![CDATA[Chrome 119.0.6045.199 DevTool Network UI BUG]]></title>
            <link>https://webclown.net/posts/chrome-119-0-6045-199-devtool-network-ui-bug</link>
            <guid isPermaLink="false">https://webclown.net/posts/chrome-119-0-6045-199-devtool-network-ui-bug</guid>
            <pubDate>Thu, 07 Dec 2023 15:33:52 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="bug-描述" tabindex="-1">BUG 描述 <a class="header-anchor" href="#bug-描述" aria-label="Permalink to &quot;BUG 描述&quot;">&ZeroWidthSpace;</a></h2>
<video width="640" height="480" controls>
  <source src="https://images.webclown.net/videos/Chrome%20DevTool%20BUG.mp4" type="video/mp4">
</video>
<p>aHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vY2hyb21lL2Fuc3dlci8xODY4NTA/dmlzaXRfaWQ9NjM4Mzc1MzExMTU2NTEwODcyLTIwOTg5NjA2NjMmcD1mZWVkYmFja19jb25maXJtYXRpb24mcmQ9MQ==</p>
<h2 id="bug-修复-2023-12-14-更新" tabindex="-1">BUG 修复（2023-12-14 更新） <a class="header-anchor" href="#bug-修复-2023-12-14-更新" aria-label="Permalink to &quot;BUG 修复（2023-12-14 更新）&quot;">&ZeroWidthSpace;</a></h2>
<div class="warning custom-block"><p class="custom-block-title">提示</p>
<p>升级到 120.0.6099.71 + 版本后，BUG 已修复。</p>
</div>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Chrome</category>
        </item>
        <item>
            <title><![CDATA[我使用的快捷指令（iOS，iPadOS，macOS）]]></title>
            <link>https://webclown.net/posts/shortcuts-i-use-ios-ipados-macos</link>
            <guid isPermaLink="false">https://webclown.net/posts/shortcuts-i-use-ios-ipados-macos</guid>
            <pubDate>Fri, 27 Oct 2023 01:10:48 GMT</pubDate>
            <content:encoded><![CDATA[<p>平常有用到的一些常用的快捷指令，可以在 <a href="https://apps.apple.com/cn/app/%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4/id915249334" target="_blank" rel="noreferrer">快捷指令.app</a> 中打开，并使用。</p>
<p><img src="https://images.webclown.net/2023-10-26-400shots_so.png??x-oss-process=image/resize,w_400" alt="iOS"></p>
<p><img src="https://images.webclown.net/2023-10-26-177shots_so.png??x-oss-process=image/resize,w_400" alt="iPadOS"></p>
<p><img src="https://images.webclown.net/2023-10-26-249shots_so.png??x-oss-process=image/resize,w_400" alt="macOS"></p>
<h2 id="图片、视频" tabindex="-1">图片、视频 <a class="header-anchor" href="#图片、视频" aria-label="Permalink to &quot;图片、视频&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="徕卡水印" tabindex="-1">徕卡水印 <a class="header-anchor" href="#徕卡水印" aria-label="Permalink to &quot;徕卡水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/3446145a0980480caef78e8a641d49c5" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/3446145a0980480caef78e8a641d49c5</a>
<img src="https://images.webclown.net/2023-10-26-103345.jpg" alt="徕卡水印"></p>
<h3 id="哈苏水印" tabindex="-1">哈苏水印 <a class="header-anchor" href="#哈苏水印" aria-label="Permalink to &quot;哈苏水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/cfc0151ba78343e1ab5477cd894c59c9" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/cfc0151ba78343e1ab5477cd894c59c9</a>
<img src="https://images.webclown.net/2023-10-26-103643.jpg" alt="哈苏水印"></p>
<h3 id="apple水印" tabindex="-1">Apple水印 <a class="header-anchor" href="#apple水印" aria-label="Permalink to &quot;Apple水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/ea6e897570504b28a8f1fb8a3b9306b4" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/ea6e897570504b28a8f1fb8a3b9306b4</a>
<img src="https://images.webclown.net/2023-10-26-103717.jpg" alt="Apple水印"></p>
<h3 id="阿莱水印" tabindex="-1">阿莱水印 <a class="header-anchor" href="#阿莱水印" aria-label="Permalink to &quot;阿莱水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/f89ac598fa9e4483b95e00c5483cf277" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/f89ac598fa9e4483b95e00c5483cf277</a>
<img src="https://images.webclown.net/2023-10-26-103731.jpg" alt="阿莱水印"></p>
<h3 id="lumix水印" tabindex="-1">Lumix水印 <a class="header-anchor" href="#lumix水印" aria-label="Permalink to &quot;Lumix水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/6a3b9a3e6e9443c5bde872f62d2a3d97" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/6a3b9a3e6e9443c5bde872f62d2a3d97</a>
<img src="https://images.webclown.net/2023-10-26-103744.jpg" alt="Lumix水印"></p>
<h3 id="蔡司水印" tabindex="-1">蔡司水印 <a class="header-anchor" href="#蔡司水印" aria-label="Permalink to &quot;蔡司水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/0d678d51c5f2464c8ca485edafa075ec" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/0d678d51c5f2464c8ca485edafa075ec</a>
<img src="https://images.webclown.net/2023-10-26-103751.jpg" alt="蔡司水印"></p>
<h3 id="富士水印" tabindex="-1">富士水印 <a class="header-anchor" href="#富士水印" aria-label="Permalink to &quot;富士水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/24a69e95508e4ea18f77a1f04106125a" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/24a69e95508e4ea18f77a1f04106125a</a>
<img src="https://images.webclown.net/2023-10-26-103757.jpg" alt="富士水印"></p>
<h3 id="索尼水印" tabindex="-1">索尼水印 <a class="header-anchor" href="#索尼水印" aria-label="Permalink to &quot;索尼水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/a38e70a622c14d9abc69afca1a3f6f1b" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/a38e70a622c14d9abc69afca1a3f6f1b</a>
<img src="https://images.webclown.net/2023-10-26-103806.jpg" alt="索尼水印"></p>
<h3 id="佳能水印" tabindex="-1">佳能水印 <a class="header-anchor" href="#佳能水印" aria-label="Permalink to &quot;佳能水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/67801f45a15346fab6674a63012e0900" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/67801f45a15346fab6674a63012e0900</a>
<img src="https://images.webclown.net/2023-10-26-103813.jpg" alt="佳能水印"></p>
<h3 id="尼康水印" tabindex="-1">尼康水印 <a class="header-anchor" href="#尼康水印" aria-label="Permalink to &quot;尼康水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/1a8314cadb874550877cf0caf80b7d0a" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/1a8314cadb874550877cf0caf80b7d0a</a>
<img src="https://images.webclown.net/2023-10-26-103821.jpg" alt="尼康水印"></p>
<h3 id="iphone水印" tabindex="-1">iPhone水印 <a class="header-anchor" href="#iphone水印" aria-label="Permalink to &quot;iPhone水印&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/aa0a3c6f879b4a239efed7da72825655" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/aa0a3c6f879b4a239efed7da72825655</a>
<img src="https://images.webclown.net/2023-10-26-IMG_0820.JPEG" alt="iPhone水印"></p>
<h3 id="视频到-gif" tabindex="-1">视频到 GIF <a class="header-anchor" href="#视频到-gif" aria-label="Permalink to &quot;视频到 GIF&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/22693aae57ba4f57af5d1db80ae632a0" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/22693aae57ba4f57af5d1db80ae632a0</a></p>
<h3 id="bing-wallpaper" tabindex="-1">Bing Wallpaper <a class="header-anchor" href="#bing-wallpaper" aria-label="Permalink to &quot;Bing Wallpaper&quot;">&ZeroWidthSpace;</a></h3>
<p>获取 bing.com 的壁纸，储存到相册，然后设置为桌面壁纸，结合自动化，实现每日自动更换壁纸</p>
<p><a href="https://www.icloud.com/shortcuts/68ee2f995d9e416e8d8564bbd2f1d331" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/68ee2f995d9e416e8d8564bbd2f1d331</a></p>
<h3 id="压缩图片" tabindex="-1">压缩图片 <a class="header-anchor" href="#压缩图片" aria-label="Permalink to &quot;压缩图片&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/417c2eee095a4ba299b026ffd76eacae" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/417c2eee095a4ba299b026ffd76eacae</a></p>
<h3 id="截屏" tabindex="-1">截屏 <a class="header-anchor" href="#截屏" aria-label="Permalink to &quot;截屏&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li>macOS 储存到桌面</li>
<li>iOS、iPadOS 储存到相册</li>
</ul>
<p><a href="https://www.icloud.com/shortcuts/73bf300bb15b42da97eaf690c231aa15" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/73bf300bb15b42da97eaf690c231aa15</a></p>
<p>最开始是在 mac 上使用，想要截取APP切换界面，电脑上出现这个界面之后就没办法再去按截屏键，然后想通过Siri语音触发这个快捷指令，然后实现了截屏</p>
<p><img src="https://images.webclown.net/2023-10-14-%E6%88%AA%E5%B1%8F.png??x-oss-process=image/resize,w_400" alt="macOs Sonoma command + tab 无法切换窗口"></p>
<h2 id="其他" tabindex="-1">其他 <a class="header-anchor" href="#其他" aria-label="Permalink to &quot;其他&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="扫一扫" tabindex="-1">扫一扫 <a class="header-anchor" href="#扫一扫" aria-label="Permalink to &quot;扫一扫&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/6558c55151a147f0923072a1db3202c8" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/6558c55151a147f0923072a1db3202c8</a></p>
<h3 id="定位解析" tabindex="-1">定位解析 <a class="header-anchor" href="#定位解析" aria-label="Permalink to &quot;定位解析&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/44516645ba2340709b6851100fef103c" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/44516645ba2340709b6851100fef103c</a></p>
<p>🕰️ 时间：2023年10月26日 18:53:10
📍 位置：北京市xxx路</p>
<p>🌏 坐标：北纬 39°00′00.00″  东经 116°00′00.00″
⛰️ 海拔：40.939米</p>
<h3 id="手电筒闪烁" tabindex="-1">手电筒闪烁 <a class="header-anchor" href="#手电筒闪烁" aria-label="Permalink to &quot;手电筒闪烁&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/b422552335774500bdac786c8db605ba" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/b422552335774500bdac786c8db605ba</a></p>
<h3 id="standby" tabindex="-1">standby <a class="header-anchor" href="#standby" aria-label="Permalink to &quot;standby&quot;">&ZeroWidthSpace;</a></h3>
<p><a href="https://www.icloud.com/shortcuts/09f757ff0c1a4dc98728d87b25ca9605" target="_blank" rel="noreferrer">https://www.icloud.com/shortcuts/09f757ff0c1a4dc98728d87b25ca9605</a></p>
<p>结合自动化，实现定时息屏</p>
<h2 id="更多推荐" tabindex="-1">更多推荐 <a class="header-anchor" href="#更多推荐" aria-label="Permalink to &quot;更多推荐&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><a href="https://support.apple.com/zh-cn/guide/shortcuts/welcome/ios" target="_blank" rel="noreferrer">快捷指令使用手册 - 官方 Apple 支持 (中国)</a></li>
</ul>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>iOS</category>
            <category>iPadOS</category>
            <category>macOS</category>
        </item>
        <item>
            <title><![CDATA[可疑邮件：企业网址域名通知函]]></title>
            <link>https://webclown.net/posts/suspicious-email-corporate-website-domain-notification</link>
            <guid isPermaLink="false">https://webclown.net/posts/suspicious-email-corporate-website-domain-notification</guid>
            <pubDate>Fri, 20 Oct 2023 11:59:14 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="起因" tabindex="-1">起因 <a class="header-anchor" href="#起因" aria-label="Permalink to &quot;起因&quot;">&ZeroWidthSpace;</a></h2>
<p>最近帮朋友维护公司相关网站，有个域名即将到期，不准备续费了，让帮忙把域名下的服务转移到另一个网站。</p>
<p>然后去阿里云域名服务里面查看该域名的信息，还有 200 多天过期，但是看 ESC、虚拟主机 实例里面都没有该域名解析对应的 IP。追问情况下，对方发给一张截图，说最近公司收到了这个通知函。</p>
<p><img src="https://images.webclown.net/2023-10-20-731697767856_.pic-1.jpg" alt="企业网址域名通知函"></p>
<p>然后再仔细看图片就不太对了，域名不正常、续费价格不正常、续费年限都不对。</p>
<p>正常续费价格：</p>
<ul>
<li>首次购买和续费 价格一样</li>
<li>白金域名（短域名或品牌域名），首次购买和续费均有溢价</li>
<li>其他情况，首次购买有溢价，续费正常价格</li>
</ul>
<p>续费年限：1-10 年 均可以续费，并不是5、10年限制</p>
<h2 id="结果" tabindex="-1">结果 <a class="header-anchor" href="#结果" aria-label="Permalink to &quot;结果&quot;">&ZeroWidthSpace;</a></h2>
<p>抱着试试看的态度，搜索了一下「<strong>企业网址域名通知函 可疑邮件</strong>」，</p>
<p><img src="https://images.webclown.net/2023-10-20-CleanShot%202023-10-20%20at%2012.24.47%402x.png" alt="企业网址域名通知函 可疑邮件 搜索结果"></p>
<p>如果你尝试联系对方，微信对方不加，电话联系，非常热情。</p>
<h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><a href="http://www.xingchenweb.com/blog/41.html" target="_blank" rel="noreferrer">谨防受骗！记一次被骗经历-星辰网络-网站开发,app开发,小程序开发</a></li>
<li><a href="https://www.xinnet.com/knowledge/1610613652.html" target="_blank" rel="noreferrer">万维网打电话说域名到期怎么办？常见域名诈骗手段有哪些 - 新网数码</a></li>
</ul>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>域名</category>
            <category>网络安全</category>
            <category>可疑邮件</category>
            <category>wanyuwang.info</category>
        </item>
        <item>
            <title><![CDATA[macOs Sonoma command + tab 无法切换窗口]]></title>
            <link>https://webclown.net/posts/macos-sonoma-command-tab-unable-to-switch-windows</link>
            <guid isPermaLink="false">https://webclown.net/posts/macos-sonoma-command-tab-unable-to-switch-windows</guid>
            <pubDate>Sat, 14 Oct 2023 23:25:59 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="问题描述" tabindex="-1">问题描述 <a class="header-anchor" href="#问题描述" aria-label="Permalink to &quot;问题描述&quot;">&ZeroWidthSpace;</a></h2>
<p>最近更新电脑（MacBook Pro）系统升级到 macOS Sonoma，在使用过程中发现下面的问题，忍受了一段时间，最终还是决定解决一下。</p>
<p>全屏应用、非全屏应用这两种应用，在使用 command + tab 切换应用的时候，捷键的指令已经执行完毕，应用状态也已经切换了，但是无法“聚焦切换”到对应的应用上。</p>
<p><img src="https://images.webclown.net/2023-10-14-%E6%88%AA%E5%B1%8F.png" alt="图1：全屏应用、非全屏应用这两种应用，在使用 command + tab 切换应用的时候，捷键的指令已经执行完毕，应用状态也已经切换了，但是无法“聚焦切换”到对应的应用上。"></p>
<h2 id="解决方案" tabindex="-1">解决方案 <a class="header-anchor" href="#解决方案" aria-label="Permalink to &quot;解决方案&quot;">&ZeroWidthSpace;</a></h2>
<p>最终在系统设置中找到了解决方案，如下图所示：</p>
<p><img src="https://images.webclown.net/2023-10-14-CleanShot%202023-10-14%20at%2013.46.51-1.png" alt="图2：切换到某个应用程序时，会切换到包含该应用程序的打开窗口的空间"></p>
<p>设置入口：</p>
<ol>
<li>屏幕左上角「🍏」 &gt; “系统设置”，</li>
<li>点按边栏中的“桌面与程序坞” ，前往右侧的“调度中心”，</li>
<li><strong>然后打开“切换到某个应用程序时，会切换到包含该应用程序的打开窗口的空间”。</strong></li>
</ol>
<p>官方解释：</p>
<p><img src="https://images.webclown.net/2023-10-14-CleanShot%202023-10-14%20at%2014.06.18.png" alt="图3：切换到某个应用程序时，会切换到包含该应用程序的打开窗口的空间"></p>
<p><img src="https://images.webclown.net/2023-10-14-CleanShot%202023-10-14%20at%2014.07.40.png" alt="图4：When switching to an application, switch to a Space with open windows for the application"></p>
<h2 id="参考资料" tabindex="-1">参考资料 <a class="header-anchor" href="#参考资料" aria-label="Permalink to &quot;参考资料&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><a href="https://support.apple.com/zh-cn/guide/mac-help/mh14112/mac" target="_blank" rel="noreferrer">在 Mac 上的多个空间中工作 - 官方 Apple 支持 (中国)</a></li>
<li><a href="https://support.apple.com/lv-lv/guide/mac-help/mh14112/14.0/mac/14.0" target="_blank" rel="noreferrer">Work in multiple spaces on Mac - Apple Atbalsts (LV)</a></li>
</ul>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Sonoma</category>
        </item>
        <item>
            <title><![CDATA[怎么区分Arc浏览器和Chrome浏览器]]></title>
            <link>https://webclown.net/posts/how-to-differentiate-between-arc-browser-and-chrome-browser</link>
            <guid isPermaLink="false">https://webclown.net/posts/how-to-differentiate-between-arc-browser-and-chrome-browser</guid>
            <pubDate>Wed, 11 Oct 2023 23:57:23 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="背景" tabindex="-1">背景 <a class="header-anchor" href="#背景" aria-label="Permalink to &quot;背景&quot;">&ZeroWidthSpace;</a></h2>
<p>在给 <a href="https://webclown.net/2023/09/27/workflows-with-chrome.html">Workflows</a> 页面里面的 Chrome 书签，添加 <strong>快速使用示例代码</strong> 时，发现在 Arc 浏览器里面，无法正常使用，而在 Chrome 浏览器里面可以正常使用。</p>
<p>看看怎么区分一下 Arc 浏览器和 Chrome 浏览器，然后在 Arc 浏览器不给提示。</p>
<p><img src="https://images.webclown.net/2023-10-10-CleanShot%202023-10-11%20at%2004.03.19.png" alt="快速使用示例代码"></p>
<p>查看两个浏览器的 User Agent，一毛一样：</p>
<p>Arc 浏览器：</p>
<p><img src="https://images.webclown.net/2023-10-10-CleanShot%202023-10-11%20at%2004.11.42%402x.png" alt="Arc Browser User Agent"></p>
<div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>> navigator.userAgent</span></span>
<span class="line"><span>&#x3C; 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'</span></span></code></pre>
</div><p>Chrome 浏览器：</p>
<p><img src="https://images.webclown.net/2023-10-10-CleanShot%202023-10-11%20at%2004.11.19-1.png" alt="Chrome Browser User Agent"></p>
<div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>> navigator.userAgent</span></span>
<span class="line"><span>&#x3C; 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'</span></span></code></pre>
</div><h2 id="解决方案" tabindex="-1">解决方案 <a class="header-anchor" href="#解决方案" aria-label="Permalink to &quot;解决方案&quot;">&ZeroWidthSpace;</a></h2>
<p>搜索找到了这篇文章：<a href="https://stackoverflow.com/questions/76123232/can-javascript-detect-the-arc-browser" target="_blank" rel="noreferrer">Can JavaScript detect the Arc browser? - Stack Overflow</a>。</p>
<p>根据这篇文章里面的提示，可以通过 获取 Arc 浏览器 的 <strong>User Agent Atylesheet（浏览器默认样式）</strong> 来区分 Arc 浏览器和 Chrome 浏览器。</p>
<p><img src="https://images.webclown.net/2023-10-10-CleanShot%202023-10-11%20at%2004.23.42%402x.png" alt="User Agent Atylesheet（浏览器默认样式）"></p>
<div class="language-css vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">css</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">:root</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-cutoutColor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#ECEDFEFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-backgroundExtra</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#FDFDFFFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-minContrastColor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#ECEDFEFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-hover</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#D3D4FDFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-background</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#E9EAFEFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-focus</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#9094FBFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-foregroundPrimary</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#3139FBFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-maxContrastColor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#212AFBFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-background-gradient-color0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#C8CAFEFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-subtitle</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#A6AAFBFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-foregroundSecondary</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#8489FBFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-foregroundTertiary</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#ECEDFEFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-background-gradient-color1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#FFE6E6FF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">    --arc-palette-title</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">#0A0D4BFF</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>只判断是否有值其中一个变量存在就可以了。</p>
<div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">script</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> setup</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> lang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"ts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { onMounted, ref } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'vue'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> isArcBrowser</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> ref</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">onMounted</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line highlighted"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  isArcBrowser.value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> getComputedStyle</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(document.documentElement)</span></span>
<span class="line highlighted"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">getPropertyValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'--arc-palette-title'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">?</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> true</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> :</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'isArcBrowser'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, isArcBrowser.value);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">});</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span></code></pre>
</div><h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://stackoverflow.com/questions/76123232/can-javascript-detect-the-arc-browser" target="_blank" rel="noreferrer">Can JavaScript detect the Arc browser? - Stack Overflow</a>。</li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Arc</category>
            <category>Chrome</category>
        </item>
        <item>
            <title><![CDATA[Alfred Workflows 合集]]></title>
            <link>https://webclown.net/posts/workflows-with-alfred</link>
            <guid isPermaLink="false">https://webclown.net/posts/workflows-with-alfred</guid>
            <pubDate>Thu, 28 Sep 2023 01:46:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>我常用的 Alfred Workflows 收录。</p>
<h2 id="caniuse" tabindex="-1">caniuse <a class="header-anchor" href="#caniuse" aria-label="Permalink to &quot;caniuse&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/willfarrell/alfred-caniuse-workflow" target="_blank" rel="noreferrer">willfarrell/alfred-caniuse-workflow: Alfred App Workflow for caniuse.com</a></p>
<p><img src="https://images.webclown.net/2023-10-21-014621.png" alt="alfred-caniuse-workflow"></p>
<h2 id="cdnjs" tabindex="-1">cdnjs <a class="header-anchor" href="#cdnjs" aria-label="Permalink to &quot;cdnjs&quot;">&ZeroWidthSpace;</a></h2>
<p>Alfred 3 workflow to search libs on cdnjs</p>
<p><a href="https://github.com/chitacan/alfred-cdnjs" target="_blank" rel="noreferrer">chitacan/alfred-cdnjs</a></p>
<p><img src="https://images.webclown.net/2023-10-21-015017.png" alt="alfred-cdnjs"></p>
<h2 id="chrome-书签" tabindex="-1">Chrome 书签 <a class="header-anchor" href="#chrome-书签" aria-label="Permalink to &quot;Chrome 书签&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/bayleedev/alfred-chrome-bookmarks" target="_blank" rel="noreferrer">bayleedev/alfred-chrome-bookmarks: 🔖 Fast Chrome bookmark searcher for Alfred.</a></p>
<p><img src="https://images.webclown.net/2023-10-21-030415.png" alt="alfred-chrome-bookmarks"></p>
<h2 id="font-awesome" tabindex="-1">Font Awesome <a class="header-anchor" href="#font-awesome" aria-label="Permalink to &quot;Font Awesome&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/ruedap/alfred-font-awesome-workflow" target="_blank" rel="noreferrer">ruedap/alfred-font-awesome-workflow: 🎩 Font Awesome workflow for Alfred</a></p>
<p><img src="https://github.com/ruedap/alfred-font-awesome-workflow/raw/assets/images/screencast-illustrator.gif" alt="alfred-font-awesome-workflow"></p>
<h2 id="github" tabindex="-1">GitHub <a class="header-anchor" href="#github" aria-label="Permalink to &quot;GitHub&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/willfarrell/alfred-github-workflow" target="_blank" rel="noreferrer">willfarrell/alfred-github-workflow: Searching Github repos.</a></p>
<p><img src="https://images.webclown.net/2023-10-21-030823.png" alt="alfred-github-workflow"></p>
<h2 id="gitignore" tabindex="-1">gitignore <a class="header-anchor" href="#gitignore" aria-label="Permalink to &quot;gitignore&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/jdno/alfred-gitignore" target="_blank" rel="noreferrer">jdno/alfred-gitignore: Create .gitignore files using Alfred</a></p>
<p><img src="https://images.webclown.net/2023-10-21-CleanShot%202023-10-21%20at%2011.10.57.png" alt="alfred-gitignore"></p>
<h2 id="hash" tabindex="-1">Hash <a class="header-anchor" href="#hash" aria-label="Permalink to &quot;Hash&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/willfarrell/alfred-hash-workflow" target="_blank" rel="noreferrer">willfarrell/alfred-hash-workflow: Hashing Strings</a></p>
<p><img src="https://images.webclown.net/2023-10-21-031211.png" alt="alfred-hash-workflow"></p>
<h2 id="mdn-search" tabindex="-1">MDN Search <a class="header-anchor" href="#mdn-search" aria-label="Permalink to &quot;MDN Search&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/gilbarbara/alfred-workflows/tree/main/mdn-search" target="_blank" rel="noreferrer">alfred-workflows/mdn-search at main · gilbarbara/alfred-workflows</a></p>
<p><img src="https://images.webclown.net/2023-10-21-CleanShot%202023-10-21%20at%2011.14.22.png" alt="mdn-search"></p>
<h2 id="open-url-in-browser" tabindex="-1">Open url in Browser <a class="header-anchor" href="#open-url-in-browser" aria-label="Permalink to &quot;Open url in Browser&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/linxz/alfredWorkflow-Open-url-in-Browser-without-http" target="_blank" rel="noreferrer">linxz/alfredWorkflow-Open-url-in-Browser-without-http: 自从用了alfred后，比较依赖这个东西，然后很多时候都是直接通过这个打开浏览器的……无意间发现其实可以同时打开多个，于是稍微调整一下……</a></p>
<p><img src="https://images.webclown.net/2023-10-21-CleanShot%202023-10-21%20at%2011.16.34.png" alt="Open url in Browser"></p>
<h2 id="package-repo-search" tabindex="-1">Package Repo Search <a class="header-anchor" href="#package-repo-search" aria-label="Permalink to &quot;Package Repo Search&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/willfarrell/alfred-pkgman-workflow" target="_blank" rel="noreferrer">willfarrell/alfred-pkgman-workflow: Package Repo Search</a></p>
<h3 id="所有命令" tabindex="-1">所有命令 <a class="header-anchor" href="#所有命令" aria-label="Permalink to &quot;所有命令&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li><code>alcatraz {query}</code>: <a href="http://alcatraz.io/" target="_blank" rel="noreferrer">Cocoa Packages</a></li>
<li><code>apt-get {query}</code>: <a href="https://apps.ubuntu.com" target="_blank" rel="noreferrer">Ubuntu Packages</a></li>
<li><code>bower {query}</code>: <a href="http://bower.io" target="_blank" rel="noreferrer">Bower Components</a> for JavaScript</li>
<li><code>brew {query}</code>: <a href="http://brew.sh" target="_blank" rel="noreferrer">Homebrew Forumale/Cask</a></li>
<li><code>chef {query}</code>: <a href="https://supermarket.chef.io" target="_blank" rel="noreferrer">Chef Cookbooks</a></li>
<li><code>cocoa {query}</code>: CocoaPods can be upgraded to CocoaDocs by changing <code>$apple_docs</code> to true in the script.</li>
<li><code>composer {query}</code>: PHP <a href="https://packagist.org" target="_blank" rel="noreferrer">Composer Packages</a></li>
<li><code>cordova {query}</code>: <a href="https://cordova.apache.org/plugins/" target="_blank" rel="noreferrer">Apache Cordova plugins</a></li>
<li><code>docker {query}</code>: <a href="http://registry.hub.docker.io" target="_blank" rel="noreferrer">Docker Images</a></li>
<li><code>definitelytyped {query}</code>: DefinitelyTyped <a href="http://definitelytyped.org" target="_blank" rel="noreferrer">TypeScript Definitions</a></li>
<li><code>gems {query}</code>: <a href="http://rubygems.org" target="_blank" rel="noreferrer">Ruby Gems</a></li>
<li><code>gradle {query}</code>: Java <a href="http://www.gradle.org" target="_blank" rel="noreferrer">Gradle Packages</a></li>
<li><code>grunt {query}</code>: Node.js task-runner <a href="http://gruntjs.com" target="_blank" rel="noreferrer">Grunt Plugins</a></li>
<li><code>gulp {query}</code>: Node.js task-runner <a href="http://gulpjs.com" target="_blank" rel="noreferrer">Gulp Plugins</a></li>
<li><code>hackage {query}</code>: Haskell <a href="https://hackage.haskell.org" target="_blank" rel="noreferrer">package archive</a></li>
<li><code>hex {query}</code>: Elixir <a href="http://hex.pm" target="_blank" rel="noreferrer">Hex Packages</a></li>
<li><code>maven {query}</code>: Java <a href="http://mvnrepository.com" target="_blank" rel="noreferrer">Maven Libraries</a></li>
<li><code>metacran {query}</code>: <a href="https://www.r-pkg.org/" target="_blank" rel="noreferrer">R Packages</a></li>
<li><code>npm {query}</code>: Node.js <a href="https://www.npmjs.org" target="_blank" rel="noreferrer">NPM Packages</a></li>
<li><code>nuget {query}</code>: .Net <a href="http://nuget.org" target="_blank" rel="noreferrer">NuGet Packages</a></li>
<li><code>pear {query}</code>: PHP <a href="http://pear.php.net" target="_blank" rel="noreferrer">Pear Packages</a></li>
<li><code>puppet {query}</code>: <a href="https://forge.puppetlabs.com" target="_blank" rel="noreferrer">Puppet Modules</a></li>
<li><code>pypi {query}</code>: <a href="https://pypi.python.org" target="_blank" rel="noreferrer">Python Packages</a></li>
<li><code>raspbian {query}</code>: <a href="http://www.raspbian.org" target="_blank" rel="noreferrer">Rasberry Pi Packages</a></li>
<li><code>rpm {query}</code>: <a href="http://rpmfind.net" target="_blank" rel="noreferrer">Red Hat Linux Packages</a></li>
<li><code>snap {query}</code>: <a href="https://snapcraft.io" target="_blank" rel="noreferrer">Snapcraft Packages</a></li>
<li><code>st {query}</code>: <a href="https://packagecontrol.io" target="_blank" rel="noreferrer">Sublime Text Packages</a></li>
<li><code>yarn {query}</code>: <a href="https://yarnpkg.com/lang/en/" target="_blank" rel="noreferrer">Yarn Packages</a></li>
<li><code>yo {query}</code>: <a href="http://yeoman.io" target="_blank" rel="noreferrer">Yeoman Generators</a></li>
</ul>
<p><img src="https://images.webclown.net/2023-10-21-CleanShot%202023-10-21%20at%2011.20.54.png" alt="Package Repo Search"></p>
<h2 id="youdao-translator" tabindex="-1">Youdao Translator <a class="header-anchor" href="#youdao-translator" aria-label="Permalink to &quot;Youdao Translator&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/wensonsmith/YoudaoTranslator" target="_blank" rel="noreferrer">wensonsmith/YoudaoTranslator: Alfred Youdao Translate Workflow</a></p>
<blockquote>
<p>配置参考 <a href="https://webclown.net/2021/10/08/configure-youdao-translation-in-alfred.html">Alfred 配置有道翻译</a></p>
</blockquote>
<p><img src="https://images.webclown.net/2023-10-21-CleanShot%202023-10-21%20at%2011.24.14.png" alt="YoudaoTranslator"></p>
<h2 id="wifi-workflow" tabindex="-1">WiFi Workflow <a class="header-anchor" href="#wifi-workflow" aria-label="Permalink to &quot;WiFi Workflow&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/ravelll/wifi-workflow" target="_blank" rel="noreferrer">ravelll/wifi-workflow: A Alfred workflow to simply control Wi-Fi setting on macOS.</a></p>
<p><img src="https://images.webclown.net/2023-10-21-CleanShot%202023-10-21%20at%2011.27.17.png" alt="wifi-workflow"></p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Alfred</category>
            <category>Workflows</category>
        </item>
        <item>
            <title><![CDATA[Chrome 书签脚本合集]]></title>
            <link>https://webclown.net/posts/workflows-with-chrome</link>
            <guid isPermaLink="false">https://webclown.net/posts/workflows-with-chrome</guid>
            <pubDate>Wed, 27 Sep 2023 23:57:23 GMT</pubDate>
            <description><![CDATA[<p>以下是一些常用的 Chrome 书签，使用步骤如下。</p>
<h2 id="如何使用" tabindex="-1">如何使用 <a class="header-anchor" href="#如何使用" aria-label="Permalink to &quot;如何使用&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>
<p><strong>手动创建书签</strong></p>
<ul>
<li>| -</li>
</ul>
</li>
</ol>
]]></description>
            <content:encoded><![CDATA[<p>以下是一些常用的 Chrome 书签，使用步骤如下。</p>
<h2 id="如何使用" tabindex="-1">如何使用 <a class="header-anchor" href="#如何使用" aria-label="Permalink to &quot;如何使用&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>
<p><strong>手动创建书签</strong></p>
<table tabindex="0">
<thead>
<tr>
<th>-</th>
<th>-</th>
</tr>
</thead>
<tbody>
<tr>
<td>1、新建书签 <img src="https://images.webclown.net/2023-09-26-CleanShot%202023-09-27%20at%2000.05.18.png" alt="新建书签"></td>
<td>2、使用以下代码替换 URL <img src="https://images.webclown.net/2023-09-26-CleanShot%202023-09-27%20at%2000.12.22.png" alt="使用以下代码替换 URL"></td>
</tr>
<tr>
<td>3、执行 <img src="https://images.webclown.net/2023-09-26-CleanShot%202023-09-27%20at%2000.20.09.png" alt="执行"></td>
<td>🎉 Done.</td>
</tr>
</tbody>
</table>
</li>
<li>
<p><strong>快速使用示例代码</strong></p>
<ol>
<li>Chrome、Firefix 直接拖拽到书签栏即可</li>
<li>Safari（我的浏览器版本是：<code>17.0 (19616.1.27.111.16)</code>）
<ol>
<li>设置-高级-【勾选】显示网页开发者功能</li>
<li>设置-开发者-【勾选】允许在智能搜索栏中使用 JavaScript</li>
<li>拖拽 <em>快速使用示例代码</em> 到书签栏即可</li>
</ol>
</li>
</ol>
</li>
</ol>
<h2 id="tapd-项目管理-计算花费工时" tabindex="-1">TAPD 项目管理 计算花费工时 <a class="header-anchor" href="#tapd-项目管理-计算花费工时" aria-label="Permalink to &quot;TAPD 项目管理 计算花费工时&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>工作台 - 仪表盘 - 添加卡片 - 统计工时时长 - 选择项目 - 选择时间 - 生成卡片</li>
<li>查看全部</li>
<li>点击书签栏中的 <code>TAPD 项目管理 计算花费工时</code> 即可</li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> arr </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [];</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> totalTime </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.g_table_autowidth tbody tr'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> name </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'h3.name span'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tr </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs[index];</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tr.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'td'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (tds.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ===</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">remove</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">remove</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">remove</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">else</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (tds.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ===</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 6</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">remove</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.g_table_autowidth tbody tr'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> index2 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index2 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index2</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tr </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs[index2];</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tr.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'td'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">arr.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x26;&#x26;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            totalTime </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Number</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            arr.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">push</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                project: tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                countTime: </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Number</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">else</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(arr.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x26;&#x26;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> arrExistIndex </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> arr.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">findIndex</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">item</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> item.project </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">===</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (arrExistIndex </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!==</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> -</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                totalTime </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Number</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                arr[arrExistIndex].countTime </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Number</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                totalTime </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Number</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                arr.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">push</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                    project: tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                    countTime: </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Number</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(tds[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].innerText)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> str </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ''</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> index3 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index3 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> arr.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index3</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {project, countTime} </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> arr[index3];</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> zanbi </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (countTime</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">totalTime </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">*</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 100</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">toFixed</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 100</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        str </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> `${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">project</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">countTime</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> zanbi</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> ?</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> `${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}${</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">(</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">Math</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">round</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">(</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">zanbi</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> *</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">)</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}`</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> :</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ''</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> }</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    str </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ` </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">totalTime</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    prompt</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"复制粘贴到 Excel 中"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, str);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><h2 id="yapi-body-参数-转换为-jsdoc-注释" tabindex="-1">Yapi body 参数 转换为 JSDoc 注释 <a class="header-anchor" href="#yapi-body-参数-转换为-jsdoc-注释" aria-label="Permalink to &quot;Yapi body 参数 转换为 JSDoc 注释&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>打开 Yapi 项目</li>
<li>选择接口</li>
<li>点击书签栏中的 <code>Yapi body 参数 转换为 JSDoc 注释</code> 即可</li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> contains</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">selector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">text</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> elements </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(selector);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> Array</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">prototype</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.filter.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">call</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(elements, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">element</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">){</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            return</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> RegExp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(text).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">test</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(element.textContent);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> capitalizeFirstLetter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> string.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">charAt</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">toUpperCase</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> string.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">slice</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs1 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.panel-view'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> apiName </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs1.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.row .colName'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> contains</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'div'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">^</span><span style="--shiki-light:#032F62;--shiki-dark:#DBEDFF">Body</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">].</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.ant-table-tbody tr'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'trs'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, trs)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> str </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> `/**</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> * ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> apiName</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> }</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tr </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> trs[index];</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tr.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"td"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        str </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ` * @param {${</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> capitalizeFirstLetter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">(</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">tds</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">].</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">innerText</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">) </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}} data.${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">].</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">innerText</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> } ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tds</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">4</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">].</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">innerText</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> }</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    str </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ` * @url ${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">location</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">href</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> }</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> * @returns Promise</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> */`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> x </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">createElement</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"DIALOG"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> t </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">createTextNode</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(str);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    x.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">appendChild</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(t);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    x.style </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "white-space: pre;"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    document.body.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">appendChild</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(x);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    x.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">addEventListener</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'copy'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">e</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">){</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">        setTimeout</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            x.hidden </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            x.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">remove</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">320</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    });</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    x.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">showModal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><h2 id="批量删除-snapmail-cc-单个邮箱内的邮件" tabindex="-1">批量删除 Snapmail.cc 单个邮箱内的邮件 <a class="header-anchor" href="#批量删除-snapmail-cc-单个邮箱内的邮件" aria-label="Permalink to &quot;批量删除 Snapmail.cc 单个邮箱内的邮件&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://www.snapmail.cc/" target="_blank" rel="noreferrer">www.snapmail.cc</a></p>
<ol>
<li>打开 Snapmail.cc</li>
<li>选择邮箱</li>
<li>点击书签栏中的 <code>批量删除 Snapmail.cc 单个邮箱内的邮件</code> 即可</li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.email-container .sidebar-scrollable-content .email-list li[ng-repeat="item in filtered = (items | orderBy:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">time</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">:!reverse | filter: search) "]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> emailId</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis[index].</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'a'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">getAttribute</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'href'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'#/email/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">];</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">        fetch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`https://www.snapmail.cc/email/${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">emailId</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, {</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        "headers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "accept"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"application/json, text/plain, */*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "accept-language"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"zh-CN,zh-TW;q=0.9,zh;q=0.8,ja-JP;q=0.7,ja;q=0.6,en-US;q=0.5,en;q=0.4,ko-KR;q=0.3,ko;q=0.2"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "cache-control"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"no-cache"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "pragma"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"no-cache"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "sec-ch-ua"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">Chromium</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">;v=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">116</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">Not)A;Brand</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">;v=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">24</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">Google Chrome</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">;v=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">116</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "sec-ch-ua-mobile"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"?0"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "sec-ch-ua-platform"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">macOS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "sec-fetch-dest"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"empty"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "sec-fetch-mode"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"cors"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "sec-fetch-site"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"same-origin"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        },</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        "referrer"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"https://www.snapmail.cc/"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        "referrerPolicy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"strict-origin-when-cross-origin"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        "body"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">null</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        "method"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"DELETE"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        "mode"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"cors"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">        "credentials"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"include"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">then</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">res</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> res.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">json</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><h2 id="公众号文章信息" tabindex="-1">公众号文章信息 <a class="header-anchor" href="#公众号文章信息" aria-label="Permalink to &quot;公众号文章信息&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>打开公众号文章</li>
<li>点击书签栏中的 <code>公众号文章信息</code> 即可</li>
<li>自动复制内容到<strong>剪切板</strong></li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> getarticleInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        obj[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'title'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> msg_title </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.title;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        obj[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'content'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> msg_desc </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">||</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        obj[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'author'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> title </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">||</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        obj[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'createTime'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'#publish_time'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">||</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Date</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">().</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">getTime</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        obj[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'image'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> msg_cdn_url </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">||</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        obj[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'blankUrl'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> location.href;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> JSON</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">stringify</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(obj, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">null</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    setTimeout</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        navigator.clipboard.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">writeText</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`${</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">getarticleInfo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">()</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">},`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">320</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><p>结果内容：</p>
<div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "title"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"主播说联播丨大胆闯、大胆试、自主改！"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "content"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "author"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"央视新闻"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "createTime"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"2023-09-26 22:47"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "image"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"https://mmbiz.qpic.cn/sz_mmbiz_jpg/oq1PymRl9D6Ok0VQvMrI5flK4zRNtnQCKkXwibaq19DHGTCKjaneibGV9Dw7IRzIFDp8ru3ekovHuCE3xSsDPDuQ/0?wx_fmt=jpeg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "blankUrl"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"https://mp.weixin.qq.com/s/ppTuriLssKstpWL-yqe9HA"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">},</span></span></code></pre>
</div><h2 id="公众号文章封面图" tabindex="-1">公众号文章封面图 <a class="header-anchor" href="#公众号文章封面图" aria-label="Permalink to &quot;公众号文章封面图&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>打开公众号文章</li>
<li>点击书签栏中的 <code>公众号文章封面图</code> 即可</li>
<li>自动打开两个窗口：1、正方形（<code>1:1</code>） 2、长方形（<code>2.35:1</code>）</li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    cdn_url_1_1 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x26;&#x26;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(cdn_url_1_1);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    msg_cdn_url </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x26;&#x26;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(msg_cdn_url);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><p><strong>快速使用示例代码：</strong> 拖拽 ta 到 书签栏 👉 <a class="js-drag" href="javascript: (function () {
    cdn_url_1_1 && window.open(cdn_url_1_1);
    msg_cdn_url && window.open(msg_cdn_url);
})();">公众号文章封面图</a></p>
<h2 id="统计美团外卖订单金额大于30元的订单" tabindex="-1">统计美团外卖订单金额大于30元的订单 <a class="header-anchor" href="#统计美团外卖订单金额大于30元的订单" aria-label="Permalink to &quot;统计美团外卖订单金额大于30元的订单&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>打开美团外卖订单详情</li>
<li><a href="https://h5.waimai.meituan.com/waimai/mindex/olist" target="_blank" rel="noreferrer">https://h5.waimai.meituan.com/waimai/mindex/olist</a></li>
<li>点击书签栏中的 <code>统计美团外卖订单金额大于30元的订单</code> 即可</li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> lis</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'div[class^="orderList"] li'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 订单列表</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> [];</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 金额</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 30</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">        // console.log(lis[index].innerText)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> li </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis[index];</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> 单个订单金额 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.price_Ul_Wom'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'实付¥'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">*</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (单个订单金额</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">*</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> >=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> 金额) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            订单列表.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">push</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                日期: li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'*[class^="time"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                订单号: li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'div[class^="orderWrap"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).dataset.id.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'id'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                商家: li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'*[class^="name"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                金额: li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.price_Ul_Wom'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'实付¥'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            })</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    setTimeout</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        navigator.clipboard.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">writeText</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`${</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">JSON</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">stringify</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">(</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">订单列表</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">reverse</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">(), </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">null</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">)</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">320</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><p>结果内容：</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">[</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  {</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "日期"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"2023-01-01 00:00"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "订单号"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"8888888888888888888"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "商家"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"麦当劳＆麦咖啡（北京西大望路店）"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "金额"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"30.0"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span></code></pre>
</div><h2 id="统计美团外卖在某个商家下的订单" tabindex="-1">统计美团外卖在某个商家下的订单 <a class="header-anchor" href="#统计美团外卖在某个商家下的订单" aria-label="Permalink to &quot;统计美团外卖在某个商家下的订单&quot;">&ZeroWidthSpace;</a></h2>
<blockquote>
<p>小商家，订单满100,1000，统一开发票，需要统计订单</p>
</blockquote>
<ol>
<li>打开美团外卖订单详情</li>
<li><a href="https://h5.waimai.meituan.com/waimai/mindex/olist" target="_blank" rel="noreferrer">https://h5.waimai.meituan.com/waimai/mindex/olist</a></li>
<li>点击书签栏中的 <code>统计美团外卖在某个商家下的订单</code> 即可</li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelectorAll</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'div[class^="orderList"] li'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 订单列表</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> []</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 商家</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '门框卤煮(双井店）'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; index</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">        // console.log(lis[index].innerText)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> li </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> lis[index]</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (商家 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">===</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'*[class^="name"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            订单列表.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">push</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                日期: li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'*[class^="time"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                订单号: li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'div[class^="orderWrap"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).dataset.id.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'id'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">                金额: li.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">querySelector</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'.price_Ul_Wom'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">).innerText.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">split</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'实付¥'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            })</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    setTimeout</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        navigator.clipboard.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">writeText</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">`${</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">JSON</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">stringify</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">(</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">订单列表</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">reverse</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">(), </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">null</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">)</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">}`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">320</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><h2 id="当前页面以窗口形式打开" tabindex="-1">当前页面以窗口形式打开 <a class="header-anchor" href="#当前页面以窗口形式打开" aria-label="Permalink to &quot;当前页面以窗口形式打开&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>打开页面（浏览器非全屏模式下）</li>
<li>点击书签栏中的 <code>当前页面以窗口形式打开</code></li>
<li>输入窗口宽度：默认 <code>540</code></li>
<li>输入窗口高度：默认 <code>800</code></li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> defaultWidth </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 540</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, defaultHeight </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 800</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> openWindowWidth </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">prompt</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'窗口宽度（width）'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, defaultWidth);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> openWindowHeight </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">prompt</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'窗口高度（height）'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, defaultHeight);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> screenHeight </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window.screen.height;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> screenWidth </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window.screen.width;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> screenX </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (screenHeight </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> openWindowHeight) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> screenY </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (screenWidth </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> openWindowWidth) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> windowFeatures </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'height='</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> openWindowHeight </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">', width='</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> openWindowWidth </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ', top='</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> screenX </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'px, left='</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> screenY </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'px, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    window.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(window.location.href, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'newwindow'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, windowFeatures);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><ul>
<li>toolbar：工具栏</li>
<li>menubar：菜单栏</li>
<li>scrollbars：滚动条</li>
<li>resizable：是否可以调整窗口大小</li>
<li>location：是否显示地址栏</li>
<li>status：是否显示状态栏</li>
</ul>
<h2 id="生成二维码" tabindex="-1">生成二维码 <a class="header-anchor" href="#生成二维码" aria-label="Permalink to &quot;生成二维码&quot;">&ZeroWidthSpace;</a></h2>
<p>依赖 <a href="http://2.webclown.net/" target="_blank" rel="noreferrer">2.webclown.net</a></p>
<ol>
<li>打开页面</li>
<li>点击书签栏中的 <code>生成二维码</code></li>
<li>自动打开新窗口，显示二维码</li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> baseUrl </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'http://2.webclown.net/?'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> url </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> baseUrl </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'url='</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> encodeURIComponent</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(location.href);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    window.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(url);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><p><strong>快速使用示例代码：</strong> 拖拽 ta 到 书签栏 👉 <a class="js-drag" href="javascript: (function () { var baseUrl = 'http://2.webclown.net/?'; var url = baseUrl + 'url=' + encodeURIComponent(location.href); window.open(url); })();">生成二维码</a></p>
<h2 id="复制转载信息" tabindex="-1">复制转载信息 <a class="header-anchor" href="#复制转载信息" aria-label="Permalink to &quot;复制转载信息&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>点击书签栏中的 <code>复制转载信息</code></li>
<li>自动复制内容到<strong>剪切板</strong></li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    navigator.clipboard.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">writeText</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'['</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.title </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ']('</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> window.location.href </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ')'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><p><strong>快速使用示例代码：</strong> 拖拽 ta 到 书签栏 👉 <a class="js-drag" href="javascript: (function () { navigator.clipboard.writeText('[' + document.title + '](' + window.location.href + ')');})();">复制转载信息</a></p>
<h2 id="生成短网址" tabindex="-1">生成短网址 <a class="header-anchor" href="#生成短网址" aria-label="Permalink to &quot;生成短网址&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>点击书签栏中的 <code>生成短网址</code></li>
<li>自动复制内容到<strong>剪切板</strong></li>
</ol>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> myHeaders </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Headers</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    myHeaders.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">append</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Content-Type"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"application/json"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> raw </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> JSON</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">stringify</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      longUrl: window.location.href,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    });</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> requestOptions </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      method: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"POST"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      headers: myHeaders,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      body: raw,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      redirect: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"follow"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    };</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    fetch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"https://00s.top/api/shorten"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, requestOptions)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">then</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">response</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> response.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">json</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">())</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">then</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">result</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (result.shortUrl) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">          const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> link</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "https://00s.top/"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> result.shortUrl;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">          const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> dialog</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">createElement</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"dialog"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          dialog.innerHTML </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "&#x3C;div class='position: fixed;top: 1em;right: 1em;background: #fff;'>&#x3C;p style='text-align: center; padding: 1em; background: #1d91eb; color: #fff;'>短网址已生成：（自动复制）&#x3C;/p>&#x3C;p style='padding: 1em;'>"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            link </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "&#x3C;/p>&#x3C;/div>"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          document.body.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">appendChild</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(dialog);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          dialog.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">showModal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          navigator.clipboard.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">writeText</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'['</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.title </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ']('</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> link </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ')'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">          setTimeout</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> dialog.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">close</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(), </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2000</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      })</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">catch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">          const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> dialog</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> document.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">createElement</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"dialog"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          dialog.innerHTML </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">            "&#x3C;div class='position: fixed;top: 1em;right: 1em;background: #fff;'>&#x3C;p style='text-align: center; padding: 1em; background: #1d91eb; color: #fff;'>生成失败&#x3C;/p>&#x3C;p style='padding: 1em;'>当前站点禁止使用书签脚本，请访问：https://00s.top 生成。&#x3C;/p>&#x3C;form method='dialog'>&#x3C;button>关闭&#x3C;/button>&#x3C;/form>&#x3C;/div>"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          document.body.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">appendChild</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(dialog);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          dialog.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">showModal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})();</span></span></code></pre>
</div><p><img src="https://images.webclown.net/2023-10-17-CleanShot%202023-10-17%20at%2016.50.28.png" alt="生成短网址：成功"></p>
<p><img src="https://images.webclown.net/2023-10-17-CleanShot%202023-10-17%20at%2016.52.02.png" alt="生成短网址：失败"></p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Chrome</category>
            <category>书签</category>
            <category>JavaScript</category>
        </item>
        <item>
            <title><![CDATA[Nuxt + Tailwind + SafeArea]]></title>
            <link>https://webclown.net/posts/nuxt-tailwind-safe-area</link>
            <guid isPermaLink="false">https://webclown.net/posts/nuxt-tailwind-safe-area</guid>
            <pubDate>Sun, 17 Sep 2023 14:14:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="前置条件" tabindex="-1">前置条件 <a class="header-anchor" href="#前置条件" aria-label="Permalink to &quot;前置条件&quot;">&ZeroWidthSpace;</a></h2>
<p>需要先设置修改一下 <code>nuxt.config.js</code> 文件，添加 <code>viewport</code> 配置：</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// nuxt.config.js</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/**</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> * 更多配置请参考</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> * https://nuxt.com/docs/api/configuration/nuxt-config</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  // ...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  head: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    meta: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"viewport"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, content: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"width=device-width, initial-scale=1"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> }, </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// 根据自己的需求修改</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre>
</div><p>更多关于 <code>viewport</code> 的内容可以参考 <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag" target="_blank" rel="noreferrer">MDN</a>。</p>
<h2 id="创建自定义插件" tabindex="-1">创建自定义插件 <a class="header-anchor" href="#创建自定义插件" aria-label="Permalink to &quot;创建自定义插件&quot;">&ZeroWidthSpace;</a></h2>
<p>在项目根目录下创建 <code>tailwind-plugin-safe-area.js</code> 文件，内容如下：</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// tailwind-plugin-safe-area.js</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">module</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">exports</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ({ </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">addUtilities</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> }) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> newUtilities</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    ".safe-top"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingTop: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"constant(safe-area-inset-top)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingTop: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"env(safe-area-inset-top)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    ".safe-left"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingLeft: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"constant(safe-area-inset-left)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingLeft: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"env(safe-area-inset-left)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    ".safe-right"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingRight: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"constant(safe-area-inset-right)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingRight: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"env(safe-area-inset-right)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    ".safe-bottom"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingBottom: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"constant(safe-area-inset-bottom)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      paddingBottom: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"env(safe-area-inset-bottom)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  };</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  addUtilities</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(newUtilities);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre>
</div><h2 id="配置-tailwind" tabindex="-1">配置 Tailwind <a class="header-anchor" href="#配置-tailwind" aria-label="Permalink to &quot;配置 Tailwind&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="tailwind-config-js" tabindex="-1">tailwind.config.js <a class="header-anchor" href="#tailwind-config-js" aria-label="Permalink to &quot;tailwind.config.js&quot;">&ZeroWidthSpace;</a></h3>
<p>在 <code>tailwind.config.js</code> 中添加插件配置：</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// tailwind.config.js</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">module</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">exports</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  // ...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  plugins: [</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    require</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"./tailwind-plugin-safe-area.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">),</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre>
</div><h3 id="tailwind-css" tabindex="-1">tailwind.css <a class="header-anchor" href="#tailwind-css" aria-label="Permalink to &quot;tailwind.css&quot;">&ZeroWidthSpace;</a></h3>
<div class="language-css vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">css</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/* tailwind.css */</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">@tailwind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> base;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">@tailwind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> components;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">@tailwind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> utilities; // 这一行是需要的，如果没有则不生效</span></span></code></pre>
</div><h2 id="使用" tabindex="-1">使用 <a class="header-anchor" href="#使用" aria-label="Permalink to &quot;使用&quot;">&ZeroWidthSpace;</a></h2>
<p>在需要使用的地方添加类名即可：</p>
<div class="language-html vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">div</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> class</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"safe-top safe-left safe-right safe-bottom"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        &#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">div</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> class</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"bg-red-500"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">>SafeArea&#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">div</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">div</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span></code></pre>
</div><h2 id="验证是否生效" tabindex="-1">验证是否生效 <a class="header-anchor" href="#验证是否生效" aria-label="Permalink to &quot;验证是否生效&quot;">&ZeroWidthSpace;</a></h2>
<p><img src="https://images.webclown.net/2023-09-17-CleanShot%202023-09-17%20at%2013.49.42.png??x-oss-process=image/resize,w_900" alt="tailwind"></p>
<h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><a href="https://tailwindcss.com/" target="_blank" rel="noreferrer">Tailwind CSS</a></li>
<li><a href="https://tailwindcss.com/docs/plugins" target="_blank" rel="noreferrer">Tailwind CSS - Customizing plugins</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag" target="_blank" rel="noreferrer">Viewport meta tag</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/env" target="_blank" rel="noreferrer">env()</a></li>
<li><a href="https://github.com/w3c/csswg-drafts/issues/1693" target="_blank" rel="noreferrer">User Agent properties and variables</a></li>
<li><a href="https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout" target="_blank" rel="noreferrer">[Apple] Adaptivity and Layout</a></li>
</ul>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Nuxt</category>
            <category>Tailwind</category>
        </item>
        <item>
            <title><![CDATA[vite + vue3 + tailwind + antdv 4]]></title>
            <link>https://webclown.net/posts/vite-vue3-tailwind-antdv4</link>
            <guid isPermaLink="false">https://webclown.net/posts/vite-vue3-tailwind-antdv4</guid>
            <pubDate>Sun, 17 Sep 2023 14:14:00 GMT</pubDate>
            <content:encoded><![CDATA[<ul>
<li><a href="https://cn.vitejs.dev/" target="_blank" rel="noreferrer">vite</a></li>
<li><a href="https://tailwindcss.com/" target="_blank" rel="noreferrer">tailwindcss</a></li>
<li><a href="https://cn.vuejs.org/" target="_blank" rel="noreferrer">vuejs</a></li>
<li><a href="https://antdv.com/docs/vue/introduce-cn" target="_blank" rel="noreferrer">antdv</a></li>
</ul>
<blockquote>
<p>兼容性注意</p>
<p>Vite 需要 Node.js 版本 14.18+，16+。然而，有些模板需要依赖更高的 Node 版本才能正常运行，当你的包管理器发出警告时，请注意升级你的 Node 版本。</p>
</blockquote>
<h2 id="vite-vue" tabindex="-1">Vite&amp;Vue <a class="header-anchor" href="#vite-vue" aria-label="Permalink to &quot;Vite&amp;Vue&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://cn.vitejs.dev/guide/#scaffolding-your-first-vite-project" target="_blank" rel="noreferrer">https://cn.vitejs.dev/guide/#scaffolding-your-first-vite-project</a></p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">PROJECT_FOLDER</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">vite4-vue3-antdv4-tailwind-starter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> create</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vite</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> $PROJECT_FOLDER </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">--template</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vue-ts</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> $PROJECT_FOLDER &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># PROJECT_FOLDER=vite4-vue3-antdv4-tailwind-starter</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># pnpm create vite $PROJECT_FOLDER --template vue-ts</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># cd $PROJECT_FOLDER</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># pnpm install</span></span></code></pre>
</div><h2 id="tailwindcss" tabindex="-1">tailwindcss <a class="header-anchor" href="#tailwindcss" aria-label="Permalink to &quot;tailwindcss&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://tailwindcss.com/docs/guides/vite#vue" target="_blank" rel="noreferrer">https://tailwindcss.com/docs/guides/vite#vue</a></p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> tailwindcss</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> postcss</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> autoprefixer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">npx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> tailwindcss</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> init</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -p</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 安装依赖 安装成功之后会初始化 postcss.config.js</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># pnpm add -D tailwindcss postcss autoprefixer</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 生成 tailwind.config.js</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># npx tailwindcss init -p</span></span></code></pre>
</div><p>编辑 tailwind.config.js</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/** </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">@type</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> {import('tailwindcss').Config}</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  content: [</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "./index.html"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "./src/**/*.{vue,js,ts,jsx,tsx}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  theme: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    extend: {},</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  plugins: [],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>将 Tailwind 指令添加到您的 CSS 中</p>
<div class="language-css vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">css</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">echo "</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">@tailwind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> base;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">@tailwind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> components;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">@tailwind</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> utilities;" >> src/tailwind.css</span></span></code></pre>
</div><p><code>&gt;</code>  向文件内写入数据，<code>&gt;&gt;</code> 向文件内追加，</p>
<p>main.ts</p>
<div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { createApp } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'vue'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> './tailwind.css'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> './style.css'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> App </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> './App.vue'</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">createApp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(App).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mount</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'#app'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span></code></pre>
</div><h3 id="编辑器支持" tabindex="-1">编辑器支持 <a class="header-anchor" href="#编辑器支持" aria-label="Permalink to &quot;编辑器支持&quot;">&ZeroWidthSpace;</a></h3>
<blockquote>
<p>vscode</p>
</blockquote>
<h3 id="自动提示" tabindex="-1">自动提示 <a class="header-anchor" href="#自动提示" aria-label="Permalink to &quot;自动提示&quot;">&ZeroWidthSpace;</a></h3>
<ul>
<li><a href="https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss" target="_blank" rel="noreferrer">Tailwind CSS IntelliSense</a></li>
</ul>
<p><img src="https://images.webclown.net/2023-09-21-050253.png??x-oss-process=image/resize,w_900" alt="Tailwind CSS IntelliSense"></p>
<p><strong>协同项目</strong> 推荐维护一下项目的 vscode 插件依赖 <code>.vscode/extensions.json</code></p>
<div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "recommendations"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: [</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "Vue.volar"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "Vue.vscode-typescript-vue-plugin"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">    "bradlc.vscode-tailwindcss"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// tailwindcss</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  ]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><h3 id="使用-prettier-自动进行类别排序" tabindex="-1">使用 Prettier 自动进行类别排序 <a class="header-anchor" href="#使用-prettier-自动进行类别排序" aria-label="Permalink to &quot;使用 Prettier 自动进行类别排序&quot;">&ZeroWidthSpace;</a></h3>
<blockquote>
<p>node modules</p>
</blockquote>
<ul>
<li><a href="https://github.com/tailwindlabs/prettier-plugin-tailwindcss" target="_blank" rel="noreferrer">prettier-plugin-tailwindcss</a></li>
</ul>
<p><img src="https://images.webclown.net/2023-09-21-050329.png??x-oss-process=image/resize,w_900" alt="prettier-plugin-tailwindcss"></p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> prettier</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> prettier-plugin-tailwindcss</span></span></code></pre>
</div><p>配置 <code>.prettierrc.json</code></p>
<div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "plugins"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"prettier-plugin-tailwindcss"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>配置 <code>.vscode/settings.json</code></p>
<div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "editor.defaultFormatter"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"esbenp.prettier-vscode"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "editor.formatOnSave"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  "editor.codeActionsOnSave"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    "source.organizeImports"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">true</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><h2 id="antdv" tabindex="-1">antdv <a class="header-anchor" href="#antdv" aria-label="Permalink to &quot;antdv&quot;">&ZeroWidthSpace;</a></h2>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -S</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ant-design-vue@4.x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> @ant-design/icons-vue</span></span></code></pre>
</div><p>按需加载</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> unplugin-vue-components</span></span></code></pre>
</div><p>vite.config.ts</p>
<div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { defineConfig } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'vite'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> vue </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> '@vitejs/plugin-vue'</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> Components </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'unplugin-vue-components/vite'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { AntDesignVueResolver } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'unplugin-vue-components/resolvers'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// https://vitejs.dev/config/</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> default</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> defineConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  plugins: [</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    vue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(),</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">    Components</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      dts: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'src/types/components.d.ts'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// 自动生成类型声明文件，默认为 ./components.d.ts</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      resolvers: [</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">        AntDesignVueResolver</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">          importStyle: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// css in js</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }),</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }),</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">})</span></span></code></pre>
</div><h2 id="vue-router" tabindex="-1">vue-router <a class="header-anchor" href="#vue-router" aria-label="Permalink to &quot;vue-router&quot;">&ZeroWidthSpace;</a></h2>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -S</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> vue-router@4.x</span></span></code></pre>
</div><h2 id="sass" tabindex="-1">sass <a class="header-anchor" href="#sass" aria-label="Permalink to &quot;sass&quot;">&ZeroWidthSpace;</a></h2>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sass</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sass-loader</span></span></code></pre>
</div>]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>vite</category>
        </item>
        <item>
            <title><![CDATA[K12-教育资料合集]]></title>
            <link>https://webclown.net/posts/k12-educational-resources-collection</link>
            <guid isPermaLink="false">https://webclown.net/posts/k12-educational-resources-collection</guid>
            <pubDate>Sun, 10 Sep 2023 22:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<ul>
<li><a href="https://www.mygraphpaper.com/index.php?lang=zh-hans" target="_blank" rel="noreferrer">***</a></li>
</ul>
<p>这个网站不错，可以生成不同格式的纸张类别：笔记本、康奈尔笔记、米字格、方格纸、网格纸、备忘录、漫画稿纸、五线谱、麦肯锡笔记等。</p>
<ul>
<li><a href="https://mathsolver.microsoft.com/zh" target="_blank" rel="noreferrer">Microsoft数学求解器-数学问题求解器和计算器</a></li>
<li><a href="https://www.nqez.com/" target="_blank" rel="noreferrer">E字帖 - 免费字帖生成器</a></li>
<li><a href="https://www.an2.net/" target="_blank" rel="noreferrer">一份爱小工具-www.an2.net，我们专注于田字格字帖相关工具研发，田字格字帖生成器系列免费工具，自2013年上线以来，一致致力于为您提供更优质全面的字帖资源和更好的用户体验。</a></li>
</ul>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>手记</category>
        </item>
        <item>
            <title><![CDATA[英文中的连字符（-）和下划线（_）]]></title>
            <link>https://webclown.net/posts/hyphens-and-underscores-in-english</link>
            <guid isPermaLink="false">https://webclown.net/posts/hyphens-and-underscores-in-english</guid>
            <pubDate>Thu, 10 Aug 2023 12:05:08 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="起因" tabindex="-1">起因 <a class="header-anchor" href="#起因" aria-label="Permalink to &quot;起因&quot;">&ZeroWidthSpace;</a></h2>
<p>下面两种命名方式，在编辑器双击 <em>button_height</em> 全部选中，编辑器双击 <em>button-height</em> 不能全部选中，编辑器为什么这样设计？</p>
<ol>
<li>button-height</li>
<li>button_height</li>
</ol>
<p>在 页面仔 群问了一下，得到了答案：</p>
<blockquote>
<p>linxz：因为 - 是连字符</p>
<p>linxz：从英文单词的角度去考虑，这里算是两个单词</p>
<p>linxz：而双击选中一般是选择单词，中文是选择词</p>
</blockquote>
<h2 id="连字符-hyphen" tabindex="-1">连字符（hyphen） <a class="header-anchor" href="#连字符-hyphen" aria-label="Permalink to &quot;连字符（hyphen）&quot;">&ZeroWidthSpace;</a></h2>
<blockquote>
<p>牛津词典</p>
</blockquote>
<ul>
<li>将多个或更多的词组成复合词
<ul>
<li>hard-hearted（铁石心肠）</li>
<li>fork-lift truck（叉车）</li>
<li>mother-to-be（孕妇）</li>
</ul>
</li>
<li>将前缀和转悠名词组成复合词
<ul>
<li>pre-Raphaelite（前拉斐尔派）</li>
<li>pre-European（欧洲前史）</li>
</ul>
</li>
<li>书写21-99之间的复合数字时
<ul>
<li>seventy-three（73）</li>
<li>thirty-one（31）</li>
</ul>
</li>
<li>有时用在英式英语中用以将以元音结尾的前缀与以相同元音开始的词隔开
<ul>
<li>co-operate（合作）</li>
<li>pre-eminent（卓越的）</li>
</ul>
</li>
<li>转行时用于单词的前半部分之后</li>
</ul>
<h2 id="下划线-underscore" tabindex="-1">下划线（underscore） <a class="header-anchor" href="#下划线-underscore" aria-label="Permalink to &quot;下划线（underscore）&quot;">&ZeroWidthSpace;</a></h2>
<p>在 <em>牛津词典</em> 中 这个<strong>不算标点符号</strong>，在这个单词 <em>underscore</em> 的释义下说明：下划线、底线，用于字母下划线或计算机命令和互联网网址中。</p>
<p>在计算机中，一般用于不允许出现空格的地方，比如：</p>
<ul>
<li>文件名
<ul>
<li>The_Dark_Knight_2008_1080p.mkv</li>
</ul>
</li>
<li>变量名
<ul>
<li>const MAX_LENGTH = 100;</li>
</ul>
</li>
<li>函数名
<ul>
<li>function get_user_info() {}</li>
</ul>
</li>
<li>等等</li>
</ul>
<h2 id="拓展" tabindex="-1">拓展 <a class="header-anchor" href="#拓展" aria-label="Permalink to &quot;拓展&quot;">&ZeroWidthSpace;</a></h2>
<p>如何配置编辑器（<a href="https://code.visualstudio.com" target="_blank" rel="noreferrer">Visual Studio Code</a>），使得双击 <em>button-height</em> 全部选中？</p>
<ol>
<li>
<p>打开 <em>settings.json</em> 文件</p>
</li>
<li>
<p>添加/编辑如下配置</p>
<div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">    ...</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">    // "editor.wordSeparators": "`~!@#$%^&#x26;*()-=+[{]}\\|;:'\",.&#x3C;>/?",</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> // 默认配置，去掉 -</span></span>
<span class="line highlighted"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    "editor.wordSeparators"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"`~!@#$%^&#x26;*()=+[{]}</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">|;:'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">\"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">,.&#x3C;>/?"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">    ...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div></li>
<li>
<p>保存配置文件，即可</p>
</li>
</ol>
<p>更多配置阅读查看：<a href="https://code.visualstudio.com/docs/getstarted/settings" target="_blank" rel="noreferrer">Visual Studio Code User and Workspace Settings</a></p>
<h2 id="参考" tabindex="-1">参考 <a class="header-anchor" href="#参考" aria-label="Permalink to &quot;参考&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://blog.wordvice.cn/topic/language-rules/hyphens/" target="_blank" rel="noreferrer">如何使用英文连字符 - Wordvice Blog</a></li>
<li><a href="https://www.ultius.com/glossary/grammar/punctuation/underscore.html" target="_blank" rel="noreferrer">Underscore | Punctuation | Grammar | Glossary | Ultius</a></li>
<li><a href="https://en.wikipedia.org/wiki/Underscore" target="_blank" rel="noreferrer">Underscore - Wikipedia</a></li>
<li><a href="https://www.oed.com/dictionary/underscore_n" target="_blank" rel="noreferrer">underscore, n. meanings, etymology and more | Oxford English Dictionary</a></li>
<li>牛津词典</li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>连字符</category>
            <category>hyphen</category>
        </item>
        <item>
            <title><![CDATA[element-plus el-button 增加 v-blur 指令]]></title>
            <link>https://webclown.net/posts/add-v-blur-directive-to-el-button-in-element-plus</link>
            <guid isPermaLink="false">https://webclown.net/posts/add-v-blur-directive-to-el-button-in-element-plus</guid>
            <pubDate>Tue, 11 Jul 2023 11:15:15 GMT</pubDate>
            <content:encoded><![CDATA[<p><img src="https://images.webclown.net/2023-09-07-CleanShot%202023-09-07%20at%2011.25.27%402x.png" alt="element-plus Button focus"></p>
<h2 id="element-plus-el-button-增加-v-blur-指令" tabindex="-1">element-plus el-button 增加 v-blur 指令 <a class="header-anchor" href="#element-plus-el-button-增加-v-blur-指令" aria-label="Permalink to &quot;element-plus el-button 增加 v-blur 指令&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="背景-问题" tabindex="-1">背景 &amp; 问题 <a class="header-anchor" href="#背景-问题" aria-label="Permalink to &quot;背景 &amp; 问题&quot;">&ZeroWidthSpace;</a></h3>
<p>解决点击按钮后，触发 el-dialog 等弹窗组件的显示交互，弹窗隐藏之后，按钮的 focus 依然存在的问题。</p>
<p>🤔 思考：这个属于正常的交互，可以理解为：用户点击的哪里触发的这个弹窗，弹窗隐藏之后，用户的焦点应该回到点击的地方。</p>
<p>如果产品经理要求，弹窗隐藏之后，隐藏的按钮不要 focus，那么就需要增加一个指令来解决这个问题。</p>
<h3 id="解决方案" tabindex="-1">解决方案 <a class="header-anchor" href="#解决方案" aria-label="Permalink to &quot;解决方案&quot;">&ZeroWidthSpace;</a></h3>
<p>1、在项目中新增一个指令文件 <code>src/directives/blur/index.ts</code>，内容如下：</p>
<p>src/directives/blur/index.ts</p>
<div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { Directive } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "vue"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> blur</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Directive</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">  mounted</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">el</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">el) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">    /**</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     * 是否是点击触发的 blur</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     *  - 点击触发 blur 时，不触发 focus</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     *  - 非点击触发 blur 时，触发 focus</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">     */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> isClick </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    el.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">addEventListener</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"click"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      isClick </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    el.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">addEventListener</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"focus"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">      if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (isClick) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        el.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">blur</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    el.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">addEventListener</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"blur"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">      isClick </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span></code></pre>
</div><p>2、在 <code>main.ts</code> 中引入该指令：</p>
<p>main.ts</p>
<div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> App </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "./App.vue"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { createApp } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "vue"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { blur } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "./directives/blur"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> app</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> createApp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(App);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// ...</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">app.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">directive</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"blur"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, blur);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">app.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">mount</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"#app"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span></code></pre>
</div><p>3、在需要使用的地方，使用 <code>v-blur</code> 指令即可：</p>
<div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">script</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> setup</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> lang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"ts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">defineOptions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Demo"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">});</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">const</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> showDialog</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">  // ...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">};</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  &#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">div</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> class</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"demo"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    &#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">el-button</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> v-blur</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> @click</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"showDialog"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">>添加&#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">el-button</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  &#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">div</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">style</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> lang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"scss"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> scoped</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// ...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">style</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span></code></pre>
</div><h3 id="最终方案-2023-08-03-更新" tabindex="-1">最终方案（2023-08-03 更新） <a class="header-anchor" href="#最终方案-2023-08-03-更新" aria-label="Permalink to &quot;最终方案（2023-08-03 更新）&quot;">&ZeroWidthSpace;</a></h3>
<p>使用 css 覆盖即可解决：</p>
<div class="language-css vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">css</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.el-button:focus-visible</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  outline</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p><img src="https://images.webclown.net/2023-09-07-CleanShot%202023-09-07%20at%2011.27.42%402x.png" alt="element-plus Button focus after"></p>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>element-plus</category>
            <category>el-button</category>
            <category>v-blur</category>
        </item>
        <item>
            <title><![CDATA[stylelint ELIFECYCLE  Command failed with exit code 129.]]></title>
            <link>https://webclown.net/posts/stylelint-elifecycle-command-failed-with-exit-code-129</link>
            <guid isPermaLink="false">https://webclown.net/posts/stylelint-elifecycle-command-failed-with-exit-code-129</guid>
            <pubDate>Mon, 26 Jun 2023 09:45:20 GMT</pubDate>
            <content:encoded><![CDATA[<p>在项目中执行 stylelint 时，报错如下：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ELIFECYCLE </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Command</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> failed</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> with</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> exit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> code</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 129.</span></span></code></pre>
</div><p>大概率是因为 stylelint 规则配置有问题，排查了好久，最后因为一个element-plus的一个变量命名导致的。</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">src/components/TableHeader/base/filterButton.vue</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> 288:16</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  ✖</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  Expected</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> custom</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> property</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "--el-dropdown-menuItem-hover-color"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> be</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> kebab-case</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  custom-property-pattern</span></span></code></pre>
</div><p>排查过程中，stylelint 始终输出这个行报错，经过以下步骤排查，最终定位到问题：</p>
<ol>
<li>删除 node_modules，重新安装依赖</li>
<li>删除 pnpm-lock.json，重新安装依赖</li>
<li>删除 .cache，重新安装依赖</li>
<li>查看 stytlelint 最新是否有新版本更新，确实有，更新到最新版本</li>
<li>重新执行 stylelint，报错信息出现</li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>stylelint</category>
            <category>lint</category>
        </item>
        <item>
            <title><![CDATA[制作一个简单的Link Preview服务]]></title>
            <link>https://webclown.net/posts/create-a-simple-link-preview-service</link>
            <guid isPermaLink="false">https://webclown.net/posts/create-a-simple-link-preview-service</guid>
            <pubDate>Thu, 25 May 2023 08:36:08 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="_1-什么是link-preview" tabindex="-1">1. 什么是Link Preview <a class="header-anchor" href="#_1-什么是link-preview" aria-label="Permalink to &quot;1. 什么是Link Preview&quot;">&ZeroWidthSpace;</a></h2>
<p>Link Preview是指鼠标移动到一个超链接上，会自动显示该链接的标题、描述、图片等信息，如下图所示：</p>
<p><img src="https://images.webclown.net/2023-05-25-004316.png" alt="维基百科"></p>
<p>当我们在浏览维基百科时，会发现在发送维基百科的链接时，会自动显示维基百科的标题、描述、图片等信息，这就是Link Preview的效果。效果有点类似，标签的 <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/title" target="_blank" rel="noreferrer">title</a> 属性，但是Link Preview的效果更加丰富，而且不需要等待太长时间。</p>
<p>也是最近逛推的时候，发现了这个网站：<a href="https://cali.so/" target="_blank" rel="noreferrer">Cali Castle</a>，增加了这个功能，大概实现是一个get请求返回了一张图片，然后在页面上显示了这张图片，这个图片就是Link Preview的效果。</p>
<p><img src="https://images.webclown.net/2023-05-25-022819.png" alt="Cali Castle"></p>
<h2 id="_2-如何实现" tabindex="-1">2. 如何实现 <a class="header-anchor" href="#_2-如何实现" aria-label="Permalink to &quot;2. 如何实现&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://github.com/Keystion/link-preview-api" target="_blank" rel="noreferrer">Keystion/link-preview-api</a></p>
<h2 id="_3-本地开发" tabindex="-1">3. 本地开发 <a class="header-anchor" href="#_3-本地开发" aria-label="Permalink to &quot;3. 本地开发&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>chrome-aws-lambda</li>
<li>puppeteer</li>
</ul>
<h2 id="_4-部署" tabindex="-1">4. 部署 <a class="header-anchor" href="#_4-部署" aria-label="Permalink to &quot;4. 部署&quot;">&ZeroWidthSpace;</a></h2>
<p>这里提供了两种部署方式：Vercel、阿里云；因为我在Vercel上部署的时候，发现内存不足<sup> [问题1] </sup>，部分功能受到限制，所以就在阿里云上部署了。</p>
<h3 id="_4-1-部署到vercel-待更新" tabindex="-1">4.1 部署到Vercel（待更新） <a class="header-anchor" href="#_4-1-部署到vercel-待更新" aria-label="Permalink to &quot;4.1 部署到Vercel（待更新）&quot;">&ZeroWidthSpace;</a></h3>
<p>需要注意的是， Vercel 的免费版，<a href="https://vercel.com/docs/concepts/limits/overview#serverless-function-memory" target="_blank" rel="noreferrer">内存有限制</a>，我们只能实现基本的功能，访问日志和缓存截图文件<sup> [1] </sup>：</p>
<h3 id="_4-2-部署到阿里云ecs" tabindex="-1">4.2 部署到阿里云ECS <a class="header-anchor" href="#_4-2-部署到阿里云ecs" aria-label="Permalink to &quot;4.2 部署到阿里云ECS&quot;">&ZeroWidthSpace;</a></h3>
<h4 id="_4-2-1-安装依赖" tabindex="-1">4.2.1 安装依赖 <a class="header-anchor" href="#_4-2-1-安装依赖" aria-label="Permalink to &quot;4.2.1 安装依赖&quot;">&ZeroWidthSpace;</a></h4>
<p>我的服务器是阿里云的ECS，系统是CentOS Linux release 7.9.2009，安装以下依赖：</p>
<ul>
<li>alsa-lib.x86_64</li>
<li>atk.x86_64</li>
<li>cups-libs.x86_64</li>
<li>gtk3.x86_64</li>
<li>ipa-gothic-fonts</li>
<li>libXcomposite.x86_64</li>
<li>libXcursor.x86_64</li>
<li>libXdamage.x86_64</li>
<li>libXext.x86_64</li>
<li>libXi.x86_64</li>
<li>libXrandr.x86_64</li>
<li>libXScrnSaver.x86_64</li>
<li>libXtst.x86_64</li>
<li>pango.x86_64</li>
<li>xorg-x11-fonts-100dpi</li>
<li>xorg-x11-fonts-75dpi</li>
<li>xorg-x11-fonts-cyrillic</li>
<li>xorg-x11-fonts-misc</li>
<li>xorg-x11-fonts-Type1</li>
<li>xorg-x11-utils</li>
</ul>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> alsa-lib.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> atk.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cups-libs.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> gtk3.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ipa-gothic-fonts</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXcomposite.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXcursor.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXdamage.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXext.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXi.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXrandr.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXScrnSaver.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> libXtst.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pango.x86_64</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-fonts-100dpi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-fonts-75dpi</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-fonts-cyrillic</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-fonts-misc</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-fonts-Type1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> xorg-x11-utils</span></span></code></pre>
</div><p>安装依赖项后，您需要使用此命令更新 nss 库</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> update</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> nss</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -y</span></span></code></pre>
</div><p>参见官方文档：<a href="https://pptr.dev/troubleshooting#chrome-doesnt-launch-on-linux" target="_blank" rel="noreferrer">Chrome doesn't launch on Linux</a>。</p>
<p>需要安装依赖，否则会报一些奇怪的错误 <sup> [问题2] </sup>。</p>
<h4 id="_4-2-2-执行部署" tabindex="-1">4.2.2 执行部署 <a class="header-anchor" href="#_4-2-2-执行部署" aria-label="Permalink to &quot;4.2.2 执行部署&quot;">&ZeroWidthSpace;</a></h4>
<p>把代码上传到服务器。安装依赖：</p>
<p>阿里云上安装依赖，需要使用淘宝的镜像源，否则会报错，安装依赖：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span></span></code></pre>
</div><p>测试代码是否可以正常运行：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">node</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> index.js</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> Server is start 9000.</span></span></code></pre>
</div><p>打开一个新的终端，测试接口是否正常：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> http://localhost:9000/api?url=https://webclown.net</span></span></code></pre>
</div><p>注意这里返回的是一个图片实体文件，终端输出内容比较多。</p>
<p>配置nginx，配置文件如下：</p>
<div class="language-nginx vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">nginx</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">server</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    listen </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      80</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    server_name </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> webclown.com;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    location</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> /api </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        proxy_pass </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">http://localhost:9000;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        proxy_redirect </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">http://localhost:9000 https://webclown.net;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>如果真正用于生成环境，设置防盗链功能，防止被恶意盗用，简单的防盗链可以以 referer、user Agent 为条件，设置防盗链，如下所示：</p>
<div class="language-nginx vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">nginx</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">server</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    ...</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    location</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> /api </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">        # 如果 reffer 不是 webclown.net 则返回 403</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ($http_referer </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!~* </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(webclown.net)) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 403</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">        # 如果没有 ua 则返回 403</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ($http_user_agent </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">= </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 403</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        proxy_pass </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">http://localhost:9000;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        proxy_redirect </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">http://localhost:9000 https://webclown.net;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    ...</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><h2 id="问题" tabindex="-1">问题 <a class="header-anchor" href="#问题" aria-label="Permalink to &quot;问题&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>问题1：Vercel 内存不足，无法正常运行。
Error: Runtime exited with error: exit status 1
Runtime.ExitError</li>
<li>问题2：阿里云上，无法正常运行，没有安装依赖。
error while loading shared libraries: libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory</li>
</ul>
<h2 id="注" tabindex="-1">注： <a class="header-anchor" href="#注" aria-label="Permalink to &quot;注：&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li>缓存截图文件：以链接的上的query参数的 md5 作为文件名，生成缓存截图文件，加快访问速度，这里也只是简单的实现，不考虑文件的持久化储存、定时清理等边界功能，这是一个复杂的点，这里不展开说明。</li>
</ol>
<h2 id="参考资料" tabindex="-1">参考资料： <a class="header-anchor" href="#参考资料" aria-label="Permalink to &quot;参考资料：&quot;">&ZeroWidthSpace;</a></h2>
<ol>
<li><a href="https://expressjs.com/" target="_blank" rel="noreferrer">Express</a></li>
<li><a href="https://vercel.com/" target="_blank" rel="noreferrer">Vercel</a></li>
<li><a href="https://pptr.dev/" target="_blank" rel="noreferrer">Puppeteer</a></li>
<li><a href="https://github.com/alixaxel/chrome-aws-lambda" target="_blank" rel="noreferrer">alixaxel / chrome-aws-lambda</a></li>
<li><a href="https://pptr.dev/troubleshooting#chrome-doesnt-launch-on-linux" target="_blank" rel="noreferrer">Chrome doesn't launch on Linux</a></li>
<li><a href="https://cali.so/" target="_blank" rel="noreferrer">Cali Castle</a></li>
<li><a href="https://github.com/michaelkitas/Puppeteer-Vercel/pulse" target="_blank" rel="noreferrer">michaelkitas / Puppeteer-Vercel</a></li>
</ol>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Link Preview</category>
        </item>
        <item>
            <title><![CDATA[获取统计相关免费数据源]]></title>
            <link>https://webclown.net/posts/get-free-data-sources-related-to-statistics</link>
            <guid isPermaLink="false">https://webclown.net/posts/get-free-data-sources-related-to-statistics</guid>
            <pubDate>Tue, 16 May 2023 11:42:54 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="trading-economics" tabindex="-1">Trading Economics <a class="header-anchor" href="#trading-economics" aria-label="Permalink to &quot;Trading Economics&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://tradingeconomics.com/" target="_blank" rel="noreferrer">https://tradingeconomics.com/</a></p>
<h2 id="世界银行" tabindex="-1">世界银行 <a class="header-anchor" href="#世界银行" aria-label="Permalink to &quot;世界银行&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://www.worldbank.org/en/home" target="_blank" rel="noreferrer">https://www.worldbank.org/en/home</a></p>
<h2 id="our-world-in-data" tabindex="-1">Our World in Data <a class="header-anchor" href="#our-world-in-data" aria-label="Permalink to &quot;Our World in Data&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://ourworldindata.org/" target="_blank" rel="noreferrer">https://ourworldindata.org/</a></p>
<h2 id="oecd" tabindex="-1">OECD <a class="header-anchor" href="#oecd" aria-label="Permalink to &quot;OECD&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://data.oecd.org/" target="_blank" rel="noreferrer">https://data.oecd.org/</a></p>
<h2 id="imf" tabindex="-1">IMF <a class="header-anchor" href="#imf" aria-label="Permalink to &quot;IMF&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="https://www.imf.org/en/Data" target="_blank" rel="noreferrer">https://www.imf.org/en/Data</a></p>
<h2 id="中国统计局" tabindex="-1">中国统计局 <a class="header-anchor" href="#中国统计局" aria-label="Permalink to &quot;中国统计局&quot;">&ZeroWidthSpace;</a></h2>
<p><a href="http://www.stats.gov.cn/" target="_blank" rel="noreferrer">http://www.stats.gov.cn/</a></p>
<h2 id="tips" tabindex="-1">TIPS <a class="header-anchor" href="#tips" aria-label="Permalink to &quot;TIPS&quot;">&ZeroWidthSpace;</a></h2>
<p>尽可能查找一手信息，一手信息的价值远远大于二手信息。</p>
<ul>
<li>一个国家数据
<ul>
<li>GDP</li>
<li>CPI</li>
<li>就业率</li>
<li>......</li>
</ul>
</li>
<li>一个公司
<ul>
<li>公司年报</li>
<li>创始人访谈</li>
<li>......</li>
</ul>
</li>
</ul>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>数据源</category>
        </item>
        <item>
            <title><![CDATA[在 macOS 上安装 Photoprism]]></title>
            <link>https://webclown.net/posts/install-photoprism-on-macos</link>
            <guid isPermaLink="false">https://webclown.net/posts/install-photoprism-on-macos</guid>
            <pubDate>Wed, 26 Apr 2023 21:59:33 GMT</pubDate>
            <content:encoded><![CDATA[<p><img src="https://images.webclown.net/2023-04-25-145722.png" alt=""></p>
<h2 id="目的" tabindex="-1">目的 <a class="header-anchor" href="#目的" aria-label="Permalink to &quot;目的&quot;">&ZeroWidthSpace;</a></h2>
<p>二次开发 或 贡献代码（Contribution）</p>
<h2 id="准备" tabindex="-1">准备 <a class="header-anchor" href="#准备" aria-label="Permalink to &quot;准备&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>系统：macOS Ventura 13.3.1 (22E261)（M1 Pro）</li>
<li>git</li>
<li>make</li>
<li>docker &amp; docker-compose</li>
<li>nodejs</li>
</ul>
<h2 id="开始" tabindex="-1">开始 <a class="header-anchor" href="#开始" aria-label="Permalink to &quot;开始&quot;">&ZeroWidthSpace;</a></h2>
<p>参照官方文档：<a href="https://docs.photoprism.app/developer-guide/setup/" target="_blank" rel="noreferrer">Setting Up Your Development Environment</a></p>
<p>1、克隆仓库</p>
<div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> git@github.com:photoprism/photoprism.git</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> photoprism</span></span></code></pre>
</div><p>2、启动本地开发环境</p>
<div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> docker-build</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> up</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># 或 后台进程</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># docker compose up -d</span></span></code></pre>
</div><p>3、安装依赖</p>
<div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> terminal</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> dep</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> build-js</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> build-go</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">./photoprism</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> start</span></span></code></pre>
</div><h2 id="完成" tabindex="-1">完成 <a class="header-anchor" href="#完成" aria-label="Permalink to &quot;完成&quot;">&ZeroWidthSpace;</a></h2>
<p>执行到这一步基本上就完成。</p>
<ul>
<li><code>http://localhost:2342</code></li>
<li><code>https://localssl.dev</code></li>
</ul>
<p><img src="https://images.webclown.net/2023-04-25-143624.png" alt=""></p>
<p>账号密码去 <code>docker-compose.yml</code> 文件里面环境变量（environment）处寻找。</p>
<ul>
<li>账号KEY： <code>PHOTOPRISM_ADMIN_USER</code></li>
<li>密码KEY： <code>PHOTOPRISM_ADMIN_PASSWORD</code></li>
</ul>
<h2 id="遇见问题" tabindex="-1">遇见问题 <a class="header-anchor" href="#遇见问题" aria-label="Permalink to &quot;遇见问题&quot;">&ZeroWidthSpace;</a></h2>
<h3 id="问题一-docker-compose-up-无法正常安装-tensorflow-lib-库" tabindex="-1">问题一：docker compose up 无法正常安装 tensorflow lib 库 <a class="header-anchor" href="#问题一-docker-compose-up-无法正常安装-tensorflow-lib-库" aria-label="Permalink to &quot;问题一：docker compose up 无法正常安装 tensorflow lib 库&quot;">&ZeroWidthSpace;</a></h3>
<p>执行 <code>docker compose up</code> 时有一个步骤需要安装 <code>tensorflow</code> lib 库，我这边碰见一个问题是，</p>
<p>安装了一个不存在的版本：<code>https://dl.photoprism.app/tensorflow/arm64/libtensorflow-arm64-auto-1.15.2.tar.gz</code>，连接上多了一个 <strong>auto</strong>。</p>
<p>正确版本应该是：<code>https://dl.photoprism.app/tensorflow/arm64/libtensorflow-arm64-1.15.2.tar.gz</code></p>
<p>修改一下这个文件的68行: <code>scripts/dist/install-tensorflow.sh:68</code>，删除选中的代码即可。</p>
<p><img src="https://images.webclown.net/2023-04-25-143118.png" alt="临时删除（-${TF_DRIVER}）"></p>
<p>是否正确，需要去这个网站查看下是否有对应的源文件：<a href="https://dl.photoprism.app/tensorflow/arm64" target="_blank" rel="noreferrer">https://dl.photoprism.app/tensorflow/arm64</a></p>
<h3 id="问题二-make-build-go-安装慢" tabindex="-1">问题二：make build-go 安装慢 <a class="header-anchor" href="#问题二-make-build-go-安装慢" aria-label="Permalink to &quot;问题二：make build-go 安装慢&quot;">&ZeroWidthSpace;</a></h3>
<p>make build-go 安装慢，可以设置代理（阿里云）：</p>
<div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> GO111MODULE</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">on</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> GOPROXY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">https://mirrors.aliyun.com/goproxy/</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">make</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> build-go</span></span></code></pre>
</div>]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>Photoprism</category>
        </item>
        <item>
            <title><![CDATA[macOS 如何修复问文件夹权限 drwxr-xr-x+、drwxr-xr-x@ 删除+、@权限]]></title>
            <link>https://webclown.net/posts/how-to-fix-folder-permissions-on-macos-remove-plus-and-at-from-drwxr-xr-x-plus-and-drwxr-xr-x-at</link>
            <guid isPermaLink="false">https://webclown.net/posts/how-to-fix-folder-permissions-on-macos-remove-plus-and-at-from-drwxr-xr-x-plus-and-drwxr-xr-x-at</guid>
            <pubDate>Fri, 21 Apr 2023 23:02:27 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="" tabindex="-1">@ <a class="header-anchor" href="#" aria-label="Permalink to &quot;@&quot;">&ZeroWidthSpace;</a></h2>
<p>规则：如果文件夹有@，则表示有ACL权限。</p>
<p><code>xattr -c &lt;finder&gt;</code></p>
<p>示例：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ll</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">drwxr-xr-x@</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 14</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yantao</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  admin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   448B</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  4</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 17</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 01:38</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> code</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> xattr -c code</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ll</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">drwxr-xr-x</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  14</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yantao</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  admin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">   448B</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  4</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 17</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 01:38</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> code</span></span></code></pre>
</div><h2 id="-1" tabindex="-1">+ <a class="header-anchor" href="#-1" aria-label="Permalink to &quot;+&quot;">&ZeroWidthSpace;</a></h2>
<p>规则：如果文件夹有+，则表示有ACL权限或者有扩展属性。</p>
<p><code>chmod -N &lt;finder&gt;</code></p>
<p>示例：</p>
<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ll</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">drwxr-xr-x+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">   5</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yantao</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  admin</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">     170</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Oct</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  5</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 03:43</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Desktop</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">drwxr-xr-x+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  17</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yantao</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  admin</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">     578</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Sep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 25</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 22:20</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Documents</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> chmod -N </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">~</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">/Destop</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ll</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">drwxr-xr-x</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">    5</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yantao</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  admin</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">     170</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Oct</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  5</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 03:43</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Desktop</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">drwxr-xr-x+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  17</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> yantao</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  admin</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">     578</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Sep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 25</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 22:20</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> Documents</span></span></code></pre>
</div><h2 id="一些资料" tabindex="-1">一些资料 <a class="header-anchor" href="#一些资料" aria-label="Permalink to &quot;一些资料&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><a href="https://apple.stackexchange.com/questions/26776/what-is-the-mark-at-the-end-of-file-description" target="_blank" rel="noreferrer">What is the &quot;+&quot; mark at the end of file description?</a></li>
</ul>
]]></content:encoded>
            <author>hi@webclown.net (Keystion)</author>
            <category>xattr</category>
            <category>chmod</category>
            <category>ACL</category>
        </item>
    </channel>
</rss>