📚 更多文档目录

🚀 搭建教程 | 1 - 📑 前置教程 | 2 - 🎈 主题调整 | 3 - ✨ 魔改教程 | 4 - 🐈 重构自用数据记录


本篇教程基于 Hexo 6.3.0 & Butterfly 4.9.0 为博主的魔改教程记录,以防自己日后因魔改迷失所记录 📝

240410 更新:新增无jquery依赖的版本,使用原生js实现;修复已知图片处理的问题

效果预览

在本站PC端自行右键体验

创建数据

  • 创建 [blogRoot]/themes/butterfly/layout/includes/rightmenu.pug 页面文件,并新增以下内容
    (注意该内容中 fontawesome 图标 需要自行替换)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
.js-pjax
#rightMenu
.rightMenu-group.rightMenu-small
.rightMenu-item#menu-backward
i.iconfont.icat-angle-left
.rightMenu-item#menu-forward
i.iconfont.icat-angle-right
.rightMenu-item#menu-refresh
i.iconfont.icat-refresh
.rightMenu-item#menu-darkmode
i.iconfont.icat-changing-over
.rightMenu-group.rightMenu-line.rightMenuPost
.rightMenu-item#menu-reading
i.iconfont.icat-read
span='阅读模式'
.rightMenu-item#menu-commentBarrage
i.iconfont.icat-danmu
span='热评开关'
.rightMenu-item#menu-postlink
i.iconfont.icat-copy-paste
span='复制本文地址'
.rightMenu-group.rightMenu-line.rightMenuPlugin
.rightMenu-item#menu-copytext
i.iconfont.icat-copy-paste
span='复制内容'
.rightMenu-item#menu-pastetext
i.iconfont.icat-clipboar
span='粘贴内容'
.rightMenu-item#menu-commenttext
i.iconfont.icat-message
span='引用评论'
.rightMenu-item#menu-search
i.iconfont.icat-search
span='站内搜索'
.rightMenu-item#menu-searchBaidu
i.iconfont.icat-baidu
span='百度搜索'
.rightMenu-item#menu-newwindow
i.iconfont.icat-new-window
span='新建窗口打开'
.rightMenu-item#menu-copylink
i.iconfont.icat-jump-link
span='复制链接地址'
.rightMenu-item#menu-copyimg
i.iconfont.icat-copy-paste
span='复制此图片'
.rightMenu-item#menu-downloadimg
i.iconfont.icat-download-save
span='下载此图片'
.rightMenu-item#menu-copylinkimg
i.iconfont.icat-jump-link
span='复制图片链接'
.rightMenu-group.rightMenu-line.rightMenuOther
a.rightMenu-item#menu-randomPost
i.iconfont.icat-random
span='随便逛逛'
if theme.translate.enable
a.rightMenu-item#menu-translate
i.iconfont.icat-simple-complex
span='繁简转换'
.rightMenu-item#menu-asidehide
i.iconfont.icat-danmu
span='边栏控制'
.rightMenu-group.rightMenu-line
a.rightMenu-item(href="/privacy/")
i.iconfont.icat-conceal
span='隐私协议'
a.rightMenu-item(href="/cc/")
i.iconfont.icat-cc
span='版权协议'
#rightMenu-mask
  • 新增 [blogRoot]/themes/butterfly/layout/includes/layout.pug 页面内容
    + 号直接删除 即是正常缩进)
1
2
3
4
5
6
7
8
  ···

else
include ./404.pug

include ./rightside.pug
include ./additional-js.pug
+ !=partial('includes/rightmenu',{}, {cache:true})
  • 新建 [blogRoot]/themes/butterfly/source/css/_page/rightmenu.styl 样式文件,并新增以下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#rightMenu
display: none
position: fixed
width: 160px
height: fit-content
top: 10%
left: 10%
background-color: var(--icat-maskbgdeep)
backdrop-filter: blur(20px) saturate(1.5)
transform: translateZ(0)
border: var(--style-border)
border-radius: 8px
z-index: 99994
box-shadow: var(--icat-shadow-black)
transition: border 0.3s
user-select: none

&:hover
border: var(--style-border-hover-always)

.rightMenu-group
padding: 6px 6px

&:not(:nth-last-child(1))
border-bottom: 1px solid var(--icat-card-border)

&.rightMenu-small
display: flex
justify-content: space-between

&.rightMenu-line
.rightMenu-item
display: flex
height: 40px
padding: 0 4px
align-items: center
transition: .6s

.rightMenu-item
height: 30px
border-radius: 6px
transition: .3s
color: var(--font-color)
cursor: pointer

*
height: 40px
line-height: 40px

&:not(:last-child)
margin-bottom: 4px

&:hover
background-color: var(--icat-blue)
color: var(--icat-white)

i
display: inline-block
text-align: center
line-height: 30px
width: 30px
height: 30px
padding: 0 5px

#rightMenu .rightMenu-group .rightMenu-item .icat-refresh,
#rightMenu .rightMenu-group .rightMenu-item .icat-changing-over,
#rightMenu .rightMenu-group .rightMenu-item .icat-simple-complex
font-weight: 900

#rightMenu-mask
position: fixed
width: 100vw
height: 100vh
background: 0 0
top: 0
left: 0
display: none
z-index: 998
可选CSS样式
  • 新建 [blogRoot]/themes/butterfly/source/css/rightmenu.css 样式文件,并新增以下内容
    (也可以在自建的css文件里新增内容)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#rightMenu {
display: none;
position: fixed;
width: 160px;
height: fit-content;
top: 10%;
left: 10%;
background-color: var(--icat-maskbgdeep);
backdrop-filter: blur(20px) saturate(1.5);
-webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-o-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
border: var(--style-border);
border-radius: 8px;
z-index: 99994;
-webkit-box-shadow: var(--icat-shadow-black);
box-shadow: var(--icat-shadow-black);
-webkit-transition: border 0.3s;
-moz-transition: border 0.3s;
-o-transition: border 0.3s;
-ms-transition: border 0.3s;
transition: border 0.3s;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#rightMenu:hover {
border: var(--style-border-hover-always);
}
#rightMenu .rightMenu-group {
padding: 6px 6px;
}
#rightMenu .rightMenu-group:not(:nth-last-child(1)) {
border-bottom: 1px solid var(--icat-card-border);
}
#rightMenu .rightMenu-group.rightMenu-small {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
-webkit-box-pack: justify;
-moz-box-pack: justify;
-o-box-pack: justify;
-ms-flex-pack: justify;
-webkit-justify-content: space-between;
justify-content: space-between;
}
#rightMenu .rightMenu-group.rightMenu-line .rightMenu-item {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
height: 40px;
padding: 0 4px;
-webkit-box-align: center;
-moz-box-align: center;
-o-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-transition: 0.6s;
-moz-transition: 0.6s;
-o-transition: 0.6s;
-ms-transition: 0.6s;
transition: 0.6s;
}
#rightMenu .rightMenu-group .rightMenu-item {
height: 30px;
border-radius: 6px;
-webkit-transition: 0.3s;
-moz-transition: 0.3s;
-o-transition: 0.3s;
-ms-transition: 0.3s;
transition: 0.3s;
color: var(--font-color);
cursor: pointer;
}
#rightMenu .rightMenu-group .rightMenu-item * {
height: 40px;
line-height: 40px;
}
#rightMenu .rightMenu-group .rightMenu-item:not(:last-child) {
margin-bottom: 4px;
}
#rightMenu .rightMenu-group .rightMenu-item:hover {
background-color: var(--icat-blue);
color: var(--icat-white);
}
#rightMenu .rightMenu-group .rightMenu-item i {
display: inline-block;
text-align: center;
line-height: 30px;
width: 30px;
height: 30px;
padding: 0 5px;
}
#rightMenu .rightMenu-group .rightMenu-item .icat-refresh,
#rightMenu .rightMenu-group .rightMenu-item .icat-changing-over,
#rightMenu .rightMenu-group .rightMenu-item .icat-simple-complex {
font-weight: 900;
}
#rightMenu-mask {
position: fixed;
width: 100vw;
height: 100vh;
background: 0 0;
top: 0;
left: 0;
display: none;
z-index: 998;
}

/* 右键样式 */
  • _config.butterfly.yml 主题配置文件中 inject 下的 head 引入 rightmenu.css
1
2
3
4
5
6
7
8
9
  ···

inject:
head:
- <link rel="stylesheet" href="/css/rightmenu.css"> # 右键菜单样式
bottom:
- ···

···
  • 创建 [blogRoot]/themes/butterfly/source/js/rightmenu.js 文件,并新增以下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
var selectTextNow = "";
let rmWidth = $("#rightMenu").width(),
rmHeight = $("#rightMenu").height(),
domhref = "",
domImgSrc = "",
globalEvent = null,
rm = {};

function imageToBlob(e) {
const n = new Image,
t = document.createElement("canvas"),
o = t.getContext("2d");
return n.crossOrigin = "", n.src = e, new Promise((e => {
n.onload = function() {
t.width = this.naturalWidth, t.height = this.naturalHeight, o.drawImage(this, 0, 0), t.toBlob((n => {
e(n)
}), "image/png", .75)
}
}))
}
async function copyImage(e) {
const n = await imageToBlob(e),
t = new ClipboardItem({
"image/png": n
});
navigator.clipboard.write([t])
}

function stopMaskScroll() {
if (document.getElementById("rightMenu-mask")) {
document.getElementById("rightMenu-mask").addEventListener("mousewheel", (function(e) {
rm.hideRightMenu()
}), !1)
}
if (document.getElementById("rightMenu")) {
document.getElementById("rightMenu").addEventListener("mousewheel", (function(e) {
rm.hideRightMenu()
}), !1)
}
}

function addRightMenuClickEvent() {
$("#rightMenu-mask").on("click", rm.hideRightMenu),
$("#rightMenu-mask").contextmenu((function() {
return rm.hideRightMenu(), !1
})),
$("#menu-backward").on("click", (function() {
window.history.back(),
rm.hideRightMenu()
})),
$("#menu-forward").on("click", (function() {
window.history.forward(),
rm.hideRightMenu()
})),
$("#menu-refresh").on("click", (function() {
rm.hideRightMenu(),
window.location.reload()
})),
$("#menu-darkmode").on("click", rm.switchDarkMode),
$("#menu-reading").on("click", rm.switchReadMode),
$("#menu-commentBarrage").on("click", (function() {
rm.hideRightMenu(),
rm.switchCommentBarrage()
})),
$("#menu-postlink").on("click", rm.copyPostUrl),
$("#menu-copytext").on("click", (function() {
rm.rightmenuCopyText(selectTextNow),
btf.snackbarShow("复制成功,复制和转载请标注本文地址")
})),
$("#menu-pastetext").on("click", rm.pasteText),
$("#menu-commenttext").on("click", (function() {
rm.commentText(selectTextNow),
rm.hideRightMenu()
})),
$("#menu-searchBaidu").on("click", rm.searchBaidu),
$("#menu-newwindow").on("click", (function() {
window.open(domhref),
rm.hideRightMenu()
})),
$("#menu-copylink").on("click", rm.copyLink),
$("#menu-copyimg").on("click", (function() {
rm.writeClipImg(domImgSrc)
})),
$("#menu-downloadimg").on("click", (function() {
rm.downloadImage(domImgSrc, "MeuiCat")
})),
$("#menu-copylinkimg").on("click", (function() {
rm.CopyLinkImg(domImgSrc)
})),
$("#menu-randomPost").on("click", (function() {
rm.hideRightMenu(),
toRandomPost()
})),
$("#menu-translate").on("click", rm.translate),
$("#menu-asidehide").on("click", rm.hideAsideBtn)
}

function selceText() {
var e;
e = document.selection ? document.selection.createRange()
.text : window.getSelection() + "", selectTextNow = e || ""
}

window.oncontextmenu = function(e) {
if (document.body.clientWidth > 768) {
let n = e.clientX + 10,
t = e.clientY,
p = $(".rightMenuPost"),
o = $(".rightMenuOther"),
i = $(".rightMenuPlugin"),
g = $("#menu-commentBarrage"),
c = $("#menu-copytext"),
r = $("#menu-pastetext"),
m = $("#menu-commenttext"),
d = $("#menu-search"),
s = $("#menu-searchBaidu"),
a = $("#menu-newwindow"),
u = $("#menu-copylink"),
l = $("#menu-copyimg"),
h = $("#menu-downloadimg"),
w = $("#menu-copylinkimg"),
y = e.target.href,
M = e.target.currentSrc,
b = !1;
return o.show(),
globalEvent = e,
selectTextNow && window.getSelection() ? (b = !0, c.show(), $("#post-comment").length ? m.show() : m.hide(), d.show(), s.show(), p.hide()) : (c.hide(), m.hide(), d.hide(), s.hide()),
y ? (b = !0, a.show(), u.show(), domhref = y, p.hide()) : (a.hide(), u.hide()),
M ? (b = !0, l.show(), h.show(), w.show(), domImgSrc = M, p.hide()) : (l.hide(), h.hide(), w.hide()),
"input" === e.target.tagName.toLowerCase() || "textarea" === e.target.tagName.toLowerCase() ? (b = !0, r.show(), p.hide()) : r.hide(),
b ? (o.hide(), i.show()) : (i.hide(), $("#body-wrap.post").length ? p.show() : p.hide()),
$(".read-mode").length ? g.hide() : g.show(),
rm.reloadrmSize(),
n + rmWidth > window.innerWidth && (n -= rmWidth + 10),
t + rmHeight > window.innerHeight && (t -= t + rmHeight - window.innerHeight),
rm.showRightMenu(!0, t, n),
$("#rightMenu-mask").attr("style", "display: flex"),
!1;
}
}
document.onmouseup = document.ondbclick = selceText

rm.showRightMenu = function(e, n = 0, t = 0) {
let o = $("#rightMenu");
o.css("top", n + "px").css("left", t + "px"),
e ? (o.show(), stopMaskScroll()) : o.hide()
},
rm.hideRightMenu = function() {
rm.showRightMenu(!1),
$("#rightMenu-mask").attr("style", "display: none")
},
rm.reloadrmSize = function() {
rmWidth = $("#rightMenu").width(),
rmHeight = $("#rightMenu").height()
},
rm.switchDarkMode = function() {
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread')
.children.length && setTimeout(() => window.disqusReset(), 200)
rm.hideRightMenu()
},
rm.switchReadMode = function() {
const $body = document.body;
if ($(".read-mode").length === 0) {
$body.classList.add('read-mode');
const newEle = document.createElement('button');
newEle.type = 'button';
newEle.className = 'iconfont icat-exit-mode exit-readmode';
$body.appendChild(newEle);

const clickFn = () => {
$body.classList.remove('read-mode');
newEle.remove();
newEle.removeEventListener('click', clickFn);
};

newEle.addEventListener('click', clickFn);
$("#menu-reading span").text("退出阅读模式");
} else {
$body.classList.remove('read-mode');
$(".exit-readmode").remove();
$("#menu-reading span").text("阅读模式");
}
rm.hideRightMenu();
},
rm.switchCommentBarrage = function() {
document.querySelector(".comment-barrage") && ($(".comment-barrage").is(":visible") ? ($(".comment-barrage").hide(),
$("#menu-commentBarrage span").text("显示热评"),
document.querySelector("#consoleCommentBarrage").classList.remove("on"),
localStorage.setItem("commentBarrageSwitch", "false")) : $(".comment-barrage").is(":hidden") && ($(".comment-barrage").show(),
$("#menu-commentBarrage span").text("关闭热评"),
document.querySelector("#consoleCommentBarrage").classList.add("on"),
localStorage.removeItem("commentBarrageSwitch"))),
rm.hideRightMenu()
},
rm.copyUrl = function(e) {
$("body")
.after("<input id='copyVal'></input>");
var n = e,
t = document.getElementById("copyVal");
t.value = n, t.select(), t.setSelectionRange(0, t.value.length), document.execCommand("copy"), $("#copyVal")
.remove()
},
rm.copyPostUrl = function() {
var e = window.location.href;
rm.copyUrl(e),
btf.snackbarShow("复制本页链接地址成功", !1, 2000),
rm.hideRightMenu()
},
rm.rightmenuCopyText = function(e) {
navigator.clipboard && navigator.clipboard.writeText(e),
rm.hideRightMenu()
},
rm.readClipboard = function() {
navigator.clipboard && navigator.clipboard.readText()
.then((e => rm.insertAtCaret(globalEvent.target, e)))
},
rm.insertAtCaret = function(e, n) {
const t = e.selectionStart,
o = e.selectionEnd;
if (document.selection) e.focus(), document.selection.createRange()
.text = n, e.focus();
else if (t || "0" == t) {
var i = e.scrollTop;
e.value = e.value.substring(0, t) + n + e.value.substring(o, e.value.length), e.focus(), e.selectionStart = t + n.length, e.selectionEnd = t + n.length, e.scrollTop = i
} else e.value += n, e.focus()
},
rm.pasteText = function() {
rm.readClipboard(),
rm.hideRightMenu()
},
rm.commentText = function (txt) {
const inputs = ["#wl-edit", ".el-textarea__inner"];
for (let i = 0; i < inputs.length; i++) {
let el = document.querySelector(inputs[i]);
if (el != null) {
el.dispatchEvent(new Event('input', { bubble: true, cancelable: true }));
el.value = '> ' + txt.replace(/\n/g, '\n> ') + '\n\n';
el.focus();
el.setSelectionRange(-1, -1);
}
}
},
rm.searchBaidu = function() {
btf.snackbarShow("即将跳转到百度搜索", !1, 2000), setTimeout((function() {
window.open("https://www.baidu.com/s?wd=" + selectTextNow)
}), "2000"),
rm.hideRightMenu()
},
rm.rightmenuCopyText = function(e) {
navigator.clipboard && navigator.clipboard.writeText(e),
rm.hideRightMenu()
},
rm.copyLink = function() {
rm.rightmenuCopyText(domhref),
btf.snackbarShow("已复制链接地址")
},
rm.downloadimging = !1,
rm.writeClipImg = function(e) {
const t = "2000";
const n = "localhost" === window.location.hostname || "127.0.0.1" === window.location.hostname ? 0 : 10000;
console.log("按下复制"),
rm.hideRightMenu(),
btf.snackbarShow("正在下载中,请稍后", !1, n),
0 == rm.downloadimging && (rm.downloadimging = !0,
setTimeout((function() {
copyImage(e), btf.snackbarShow("复制成功!图片已添加盲水印,请遵守版权协议"), rm.downloadimging = !1
}), t))
},
rm.downloadImage = function(e, t) {
rm.hideRightMenu(),
0 == rm.downloadimging ? (rm.downloadimging = !0, btf.snackbarShow("正在下载中,请稍后", !1, 10000), setTimeout((function() {
let o = new Image;
o.setAttribute("crossOrigin", "anonymous"), o.onload = function() {
let e = document.createElement("canvas");
e.width = o.width, e.height = o.height, e.getContext("2d")
.drawImage(o, 0, 0, o.width, o.height);
let n = e.toDataURL("image/png"),
a = document.createElement("a"),
l = new MouseEvent("click");
a.download = t || "photo", a.href = n, a.dispatchEvent(l)
}, o.src = e, btf.snackbarShow("图片已添加盲水印,请遵守版权协议"), rm.downloadimging = !1
}), "10000")) : btf.snackbarShow("有正在进行中的下载,请稍后再试")
},
rm.CopyLinkImg = function(e) {
rm.rightmenuCopyText(e),
btf.snackbarShow("已复制图片链接")
},
rm.translate = function() {
rm.hideRightMenu(),
document.getElementById("translateLink").click();
},
rm.hideAsideBtn = function() {
const $htmlDom = document.documentElement.classList
const saveStatus = $htmlDom.contains('hide-aside') ? 'show' : 'hide'
saveToLocal.set('aside-status', saveStatus, 2)
$htmlDom.toggle('hide-aside')
rm.hideRightMenu()
};

// 右键菜单
  • _config.butterfly.yml 主题配置文件中 inject 下的 bottom 引入 jqueryrightmenu.js
1
2
3
4
5
6
7
8
9
10
  ···

inject:
head:
- ···
bottom:
- <script src="https://cdn.staticfile.net/jquery/3.7.1/jquery.min.js"></script> # JQ库
- <script type="text/javascript" src="/js/rightmenu.js"></script> # 右键菜单

···
无JQ库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
var selectTextNow = "";
let rmWidth = document.getElementById("rightMenu").offsetWidth,
rmHeight = document.getElementById("rightMenu").offsetHeight,
domhref = "",
domImgSrc = "",
globalEvent = null,
rm = {};

function imageToBlob(e) {
const n = new Image,
t = document.createElement("canvas"),
o = t.getContext("2d");
return n.crossOrigin = "", n.src = e, new Promise((e => {
n.onload = function() {
t.width = this.naturalWidth, t.height = this.naturalHeight, o.drawImage(this, 0, 0), t.toBlob((n => {
e(n)
}), "image/png", .75)
}
}))
}
async function copyImage(e) {
const n = await imageToBlob(e),
t = new ClipboardItem({
"image/png": n
});
navigator.clipboard.write([t])
}

function stopMaskScroll() {
if (document.getElementById("rightMenu-mask")) {
document.getElementById("rightMenu-mask").addEventListener("mousewheel", (function(e) {
rm.hideRightMenu()
}), !1)
}
if (document.getElementById("rightMenu")) {
document.getElementById("rightMenu").addEventListener("mousewheel", (function(e) {
rm.hideRightMenu()
}), !1)
}
}

function addRightMenuClickEvent() {
document.getElementById("rightMenu-mask").addEventListener("click", rm.hideRightMenu);
document.getElementById("rightMenu-mask").addEventListener("contextmenu", function() {
rm.hideRightMenu();
return false;
});
document.getElementById("menu-backward").addEventListener("click", function() {
window.history.back();
rm.hideRightMenu();
});
document.getElementById("menu-forward").addEventListener("click", function() {
window.history.forward();
rm.hideRightMenu();
});
document.getElementById("menu-refresh").addEventListener("click", function() {
rm.hideRightMenu();
window.location.reload();
});
document.getElementById("menu-darkmode").addEventListener("click", rm.switchDarkMode);
document.getElementById("menu-reading").addEventListener("click", rm.switchReadMode);
document.getElementById("menu-commentBarrage").addEventListener("click", function() {
rm.hideRightMenu();
rm.switchCommentBarrage();
});
document.getElementById("menu-postlink").addEventListener("click", rm.copyPostUrl);
document.getElementById("menu-copytext").addEventListener("click", function() {
rm.rightmenuCopyText(selectTextNow);
btf.snackbarShow("复制成功,复制和转载请标注本文地址");
});
document.getElementById("menu-pastetext").addEventListener("click", rm.pasteText);
document.getElementById("menu-commenttext").addEventListener("click", function() {
rm.commentText(selectTextNow);
rm.hideRightMenu();
});
document.getElementById("menu-searchBaidu").addEventListener("click", rm.searchBaidu);
document.getElementById("menu-newwindow").addEventListener("click", function() {
window.open(domhref);
rm.hideRightMenu();
});
document.getElementById("menu-copylink").addEventListener("click", rm.copyLink);
document.getElementById("menu-copyimg").addEventListener("click", function() {
rm.writeClipImg(domImgSrc);
});
document.getElementById("menu-downloadimg").addEventListener("click", function() {
rm.downloadImage(domImgSrc, "MeuiCat");
});
document.getElementById("menu-copylinkimg").addEventListener("click", function() {
rm.CopyLinkImg(domImgSrc);
});
document.getElementById("menu-randomPost").addEventListener("click", function() {
rm.hideRightMenu();
toRandomPost();
});
document.getElementById("menu-translate").addEventListener("click", rm.translate);
document.getElementById("menu-asidehide").addEventListener("click", rm.hideAsideBtn);
}

function selceText() {
var e;
if (window.getSelection) {
e = window.getSelection().toString();
} else if (document.selection) {
e = document.selection.createRange().text;
}
selectTextNow = e || "";
}

window.oncontextmenu = function(e) {
if (document.body.clientWidth > 768) {
let n = e.clientX + 10,
t = e.clientY,
p = document.querySelector(".rightMenuPost"),
o = document.querySelector(".rightMenuOther"),
i = document.querySelector(".rightMenuPlugin"),
g = document.getElementById("menu-commentBarrage"),
c = document.getElementById("menu-copytext"),
r = document.getElementById("menu-pastetext"),
m = document.getElementById("menu-commenttext"),
d = document.getElementById("menu-search"),
s = document.getElementById("menu-searchBaidu"),
a = document.getElementById("menu-newwindow"),
u = document.getElementById("menu-copylink"),
l = document.getElementById("menu-copyimg"),
h = document.getElementById("menu-downloadimg"),
w = document.getElementById("menu-copylinkimg"),
y = e.target.href,
M = e.target.currentSrc,
b = false;

o.style.display = "block";
globalEvent = e;

if (selectTextNow && window.getSelection()) {
b = true;
c.style.display = "block";
document.getElementById("post-comment") ? m.style.display = "block" : m.style.display = "none";
d.style.display = "block";
s.style.display = "block";
p.style.display = "none";
} else {
c.style.display = "none";
m.style.display = "none";
d.style.display = "none";
s.style.display = "none";
}

if (y) {
b = true;
a.style.display = "block";
u.style.display = "block";
domhref = y;
p.style.display = "none";
} else {
a.style.display = "none";
u.style.display = "none";
}

if (M) {
b = true;
l.style.display = "block";
h.style.display = "block";
w.style.display = "block";
domImgSrc = M;
p.style.display = "none";
} else {
l.style.display = "none";
h.style.display = "none";
w.style.display = "none";
}

if (e.target.tagName.toLowerCase() === "input" || e.target.tagName.toLowerCase() === "textarea") {
b = true;
r.style.display = "block";
p.style.display = "none";
} else {
r.style.display = "none";
}

if (b) {
o.style.display = "none";
i.style.display = "block";
} else {
i.style.display = "none";
document.querySelector("#body-wrap.post") ? p.style.display = "block" : p.style.display = "none";
}

document.querySelector(".read-mode") ? g.style.display = "none" : g.style.display = "block";

rm.reloadrmSize();

if (n + rmWidth > window.innerWidth) {
n -= rmWidth + 10;
}

if (t + rmHeight > window.innerHeight) {
t -= t + rmHeight - window.innerHeight;
}

rm.showRightMenu(true, t, n);
document.getElementById("rightMenu-mask").style.display = "flex";
return false;
}
}
document.onmouseup = document.ondbclick = selceText

rm.showRightMenu = function(e, n = 0, t = 0) {
const rightMenu = document.getElementById("rightMenu");
rightMenu.style.top = n + "px";
rightMenu.style.left = t + "px";
if (e) {
rightMenu.style.display = "block";
stopMaskScroll();
} else {
rightMenu.style.display = "none";
}
},
rm.hideRightMenu = function() {
rm.showRightMenu(false);
document.getElementById("rightMenu-mask").style.display = "none";
},
rm.reloadrmSize = function() {
rmWidth = document.getElementById("rightMenu").offsetWidth;
rmHeight = document.getElementById("rightMenu").offsetHeight;
},
rm.switchDarkMode = function() {
const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
if (nowMode === 'light') {
activateDarkMode()
saveToLocal.set('theme', 'dark', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
} else {
activateLightMode()
saveToLocal.set('theme', 'light', 2)
GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
}
typeof utterancesTheme === 'function' && utterancesTheme()
typeof FB === 'object' && window.loadFBComment()
window.DISQUS && document.getElementById('disqus_thread')
.children.length && setTimeout(() => window.disqusReset(), 200)
rm.hideRightMenu()
},
rm.switchReadMode = function() {
const body = document.body;
if (!document.querySelector(".read-mode")) {
body.classList.add('read-mode');
const newButton = document.createElement('button');
newButton.type = 'button';
newButton.className = 'iconfont icat-exit-mode exit-readmode';
body.appendChild(newButton);

const clickFn = () => {
body.classList.remove('read-mode');
newButton.remove();
newButton.removeEventListener('click', clickFn);
};

newButton.addEventListener('click', clickFn);
document.getElementById("menu-reading").querySelector("span").textContent = "退出阅读模式";
} else {
body.classList.remove('read-mode');
const exitButton = document.querySelector('.exit-readmode');
if (exitButton) {
exitButton.remove();
}
document.getElementById("menu-reading").querySelector("span").textContent = "阅读模式";
}
rm.hideRightMenu();
},
rm.switchCommentBarrage = function() {
const commentBarrage = document.querySelector(".comment-barrage");
if (commentBarrage) {
if (commentBarrage.style.display === "block") {
commentBarrage.style.display = "none";
document.getElementById("menu-commentBarrage").querySelector("span").textContent = "显示热评";
document.querySelector("#consoleCommentBarrage").classList.remove("on");
localStorage.setItem("commentBarrageSwitch", "false");
} else {
commentBarrage.style.display = "block";
document.getElementById("menu-commentBarrage").querySelector("span").textContent = "关闭热评";
document.querySelector("#consoleCommentBarrage").classList.add("on");
localStorage.removeItem("commentBarrageSwitch");
}
}
rm.hideRightMenu();
},
rm.copyUrl = function(url) {
const input = document.createElement("input");
input.id = "copyVal";
document.body.appendChild(input);
input.value = url;
input.select();
input.setSelectionRange(0, input.value.length);
document.execCommand("copy");
input.remove();
},
rm.copyPostUrl = function() {
const url = window.location.href;
rm.copyUrl(url);
btf.snackbarShow("复制本页链接地址成功", false, 2000);
rm.hideRightMenu();
},
rm.rightmenuCopyText = function(text) {
if (navigator.clipboard) {
navigator.clipboard.writeText(text);
}
rm.hideRightMenu();
},
rm.readClipboard = function() {
if (navigator.clipboard) {
navigator.clipboard.readText().then((text) => rm.insertAtCaret(globalEvent.target, text));
}
},
rm.insertAtCaret = function(input, text) {
const start = input.selectionStart;
const end = input.selectionEnd;
if (document.selection) {
input.focus();
document.selection.createRange().text = text;
input.focus();
} else if (start || start === 0) {
const scrollTop = input.scrollTop;
input.value = input.value.substring(0, start) + text + input.value.substring(end, input.value.length);
input.focus();
input.selectionStart = start + text.length;
input.selectionEnd = start + text.length;
input.scrollTop = scrollTop;
} else {
input.value += text;
input.focus();
}
},
rm.pasteText = function() {
rm.readClipboard();
rm.hideRightMenu();
},
rm.commentText = function (txt) {
const inputs = ["#wl-edit", ".el-textarea__inner"];
for (let i = 0; i < inputs.length; i++) {
let el = document.querySelector(inputs[i]);
if (el != null) {
el.dispatchEvent(new Event('input', { bubble: true, cancelable: true }));
el.value = '> ' + txt.replace(/\n/g, '\n> ') + '\n\n';
el.focus();
el.setSelectionRange(-1, -1);
}
}
},
rm.searchBaidu = function() {
btf.snackbarShow("即将跳转到百度搜索", false, 2000);
setTimeout(function() {
window.open("https://www.baidu.com/s?wd=" + selectTextNow);
}, 2000);
rm.hideRightMenu();
},
rm.copyLink = function() {
rm.rightmenuCopyText(domhref);
btf.snackbarShow("已复制链接地址");
},
rm.writeClipImg = function(url) {
const lazyTime = "2000";
const waitTime = "localhost" === window.location.hostname || "127.0.0.1" === window.location.hostname ? 0 : 10000;
console.log("按下复制");
rm.hideRightMenu();
btf.snackbarShow("正在下载中,请稍后", false, waitTime);
if (rm.downloadimging === 0) {
rm.downloadimging = true;
setTimeout(function() {
copyImage(url);
btf.snackbarShow("复制成功!图片已添加盲水印,请遵守版权协议");
rm.downloadimging = false;
}, lazyTime);
}
},
rm.downloadImage = function(url, name) {
rm.hideRightMenu();
if (rm.downloadimging === 0) {
rm.downloadimging = true;
btf.snackbarShow("正在下载中,请稍后", false, 10000);
setTimeout(function() {
let img = new Image();
img.setAttribute("crossOrigin", "anonymous");
img.onload = function() {
let canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
let ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
let dataURL = canvas.toDataURL("image/png");
let a = document.createElement("a");
let event = new MouseEvent("click");
a.download = name || "photo";
a.href = dataURL;
a.dispatchEvent(event);
};
img.src = url;
btf.snackbarShow("图片已添加盲水印,请遵守版权协议");
rm.downloadimging = false;
}, 10000);
} else {
btf.snackbarShow("有正在进行中的下载,请稍后再试");
}
},
rm.CopyLinkImg = function(url) {
rm.rightmenuCopyText(url);
btf.snackbarShow("已复制图片链接");
},
rm.translate = function() {
rm.hideRightMenu();
document.getElementById("translateLink").click();
},
rm.hideAsideBtn = function() {
const htmlDom = document.documentElement.classList;
const saveStatus = htmlDom.contains('hide-aside') ? 'show' : 'hide';
saveToLocal.set('aside-status', saveStatus, 2);
htmlDom.toggle('hide-aside');
rm.hideRightMenu();
};

// 右键菜单
  • _config.butterfly.yml 主题配置文件中 inject 下的 bottom 引入 rightmenu.js
1
2
3
4
5
6
7
8
9
  ···

inject:
head:
- ···
bottom:
- <script type="text/javascript" src="/js/rightmenu.js"></script> # 右键菜单

···

声明三重曲

仅供参考

隐私协议

  • 创建 [blogRoot]/source/privacy/index.md 页面,配置以下内容
1
2
3
4
5
6
7
8
9
---
title: 隐私政策
date: 2023-03-14 12:04:24
top_img: false
aside: false
comments: false
---

<!-- 页面内容 -->
  • 新增 [blogRoot]/source/privacy/index.md 页面内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
<script src="https://cdn.meuicat.com/gh/UAParser.js/ua-parser.min.js"></script>
<script>
function getIpInfo() {
var fetchUrl = "https://api.qjqq.cn/api/Local"
fetch(fetchUrl)
.then(res => res.json())
.then(json => {
var ip = json.ip;
var country = json.data.country;
var prov = json.data.prov;
var city = json.data.city;
var district = json.data.district;
var precise_radius = json.data.radius;
var radius = Math.floor(precise_radius);
var isp = json.data.isp;
document.getElementById("userAgentIp")
.innerHTML = ip;
document.getElementById("userAgentCountry")
.innerHTML = country;
document.getElementById("userAgentProv")
.innerHTML = prov;
document.getElementById("userAgentCity")
.innerHTML = city;
document.getElementById("userAgentDistrict")
.innerHTML = district;
document.getElementById("userAgentRadius")
.innerHTML = radius + '公里';
document.getElementById("userAgentISP")
.innerHTML = isp;

// 使用ua-parser-js解析User-Agent
var parser = new UAParser();
var result = parser.getResult();
document.getElementById("userAgentOS")
.innerHTML = result.os.name + " " + result.os.version;
document.getElementById("userAgentBrowser")
.innerHTML = result.browser.name + " " + result.browser.version;
})
} // 获取ip信息
</script>

本站非常重视用户的隐私和个人信息保护。你在使用网站时,可能会收集和使用你的相关信息;通过《隐私政策》向你说明在你访问 `meuicat.com`网站时,如何收集、使用、保存、共享和转让这些信息

## 最新更新时间

协议最新更新时间为:**2023-09-22**

### 一、在访问时如何收集和使用你的个人信息

**在访问时,收集访问信息的服务会收集不限于以下信息:**

<font color="Peru">**网络身份标识信息**</font>(浏览器UA、IP地址)

<font color="Peru">**设备信息**</font>

<font color="Peru">**浏览过程**</font>(操作方式、浏览方式与时长、性能与网络加载情况)


**在访问时,本站内置的第三方服务会通过以下或更多途径,来获取你的以下或更多信息:**

* <font color="ForestGreen">**51la统计工具**</font> 会收集你的访问信息,用于网站维护

* <font color="ForestGreen">**灵雀应用监控平台**</font> 会收集你的访问操作过程和资源加载情况,用于网站维护

* <font color="ForestGreen">**busuanzi统计**</font> 仅加载统计访问量

* <font color="ForestGreen">**阿里云**</font> 会收集你的访问信息

* <font color="ForestGreen">**腾讯Codesign**</font> 仅提供icon图标显示加载服务

* <font color="ForestGreen">**多吉云CDN**</font><font color="ForestGreen">**无畏云CDN**</font> 会收集你的访问信息,用于网站加速


**在访问时,本人仅会处于以下目的,使用你的个人信息:**

* 用于网站的优化与文章分类,用户优化文章

* 恶意访问识别,用于维护网站

* 恶意攻击排查,用于维护网站

* 网站点击情况监测,用于优化网站页面

* 网站加载情况监测,用于优化网站性能

* 用于网站搜索结果优化

* 浏览数据的展示

**第三方信息获取方将您的数据用于以下用途:**
第三方可能会用于其他目的,详情请访问对应第三方服务提供的隐私协议

**你应该知道在你访问的时候不限于以下信息会被第三方获取并使用:**
第三方部分为了抵抗攻击、使用不同节点cdn加速等需求会收集不限于以下信息

<div class="table-wrap">
<table>
<thead>
<tr>
<th>类型<div style="width:100px"></div></th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td td colspan="2"><b style="color: var(--icat-blue);font-size: 16px;">网络信息</b></td>
</tr>
<tr>
<td>IP地址</td><td><div id="userAgentIp">未能获取到信息</div></td>
</tr>
<tr>
<td>国家</td><td><div id="userAgentCountry">未能获取到信息</div></td>
</tr>
<tr>
<td>省份</td><td><div id="userAgentProv">未能获取到信息</div></td>
</tr>
<tr>
<td>城市</td><td><div id="userAgentCity">未能获取到信息</div></td>
</tr>
<tr>
<td>区域</td><td><div id="userAgentDistrict">未能获取到信息</div></td>
</tr>
<tr>
<td>偏差半径</td><td><div id="userAgentRadius">未能获取到信息</div></td>
</tr>
<tr>
<td>运营商</td><td><div id="userAgentISP">未能获取到信息</div></td>
</tr>
<tr>
<td td colspan="2"><b style="color: var(--icat-blue);font-size: 16px;">设备信息</b></td></tr>
<tr>
<td>操作系统</td><td><div id="userAgentOS">未能获取到信息</div></td>
</tr>
<tr>
<td>浏览器</td><td><div id="userAgentBrowser">未能获取到信息</div></td>
</tr>
</tbody>
</table>
</div>

> 此页面如果未能获取到信息并不代表无法读取上述信息,以实际情况为准

### 二、在评论时如何收集和使用你的个人信息

评论使用的是无登陆系统的匿名评论系统,你可以自愿填写真实的、或者虚假的信息作为你评论的展示信息。<font color="Peru">**鼓励你使用不易被人恶意识别的昵称进行评论**</font>,但是建议你填写<font color="Peru">**真实的邮箱**</font>以便收到回复(邮箱信息不会被公开)

在你评论时,会额外收集你的个人信息

#### 在评论时,本站内置的第三方服务会通过以下或更多途径,来获取你的相关信息:

* <font color="ForestGreen">**cravatar**</font> 会收集你的访问信息、评论填写的个人信息用于展示头像

#### 在访问时,本人仅会处于以下目的,收集并使用以下信息:

* 评论时会记录你的QQ帐号(如果在邮箱位置填写QQ邮箱或QQ号),方便获取你的QQ头像。如果使用QQ邮箱但不想展示QQ头像,可以填写不含QQ号的QQ邮箱。(主动,存储)

* 评论时会记录你的邮箱,当我回复后会通过邮件通知你(主动,存储,不会公开邮箱)

* 评论时会记录你的网址,用于点击头像时快速进入你的网站(主动,存储)

* 评论时会记录你的IP地址,作为反垃圾的用户判别依据(被动,存储,不会公开IP,会公开IP所在城市)

* 评论会记录你的浏览器代理,用作展示系统版本、浏览器版本方便展示你使用的设备,快速定位问题(被动,存储)

### 三、如何使用 Cookies 和本地 LocalStorage 存储

本站为实现深色模式切换,不蒜子的uv统计等功能,会在你的浏览器中进行本地存储,你可以随时清除浏览器中保存的所有 Cookies 以及 LocalStorage,不影响你的正常使用

本博客中的以下业务会在你的计算机上主动存储数据:

#### <font color="Peru">**内置服务**</font>

* 即刻短文
* 生活相册
* 人生足迹
* 评论系统

#### <font color="Peru">**第三方服务**</font>

* 51la分析
* 灵雀监控
* busuanzi统计
* 多吉云CDN
* 无畏云CDN

关于如何使用你的Cookies,请访问 [**Cookies政策**](/cookies/)
关于如何[**在 Chrome 中清除、启用和管理 Cookie**](https://support.google.com/chrome/answer/95647?co=GENIE.Platform=Desktop&hl=zh-Hans)

### 四、如何共享、转让你的个人信息
本人不会与任何公司、组织和个人共享你的隐私信息

本人不会将你的个人信息转让给任何公司、组织和个人

第三方服务的共享、转让情况详见对应服务的隐私协议

### 五、附属协议
当监测到存在恶意访问、恶意请求、恶意攻击、恶意评论的行为时,为了防止增大受害范围,可能会临时将你的ip地址及访问信息短期内添加到黑名单,短期内禁止访问

此黑名单可能被公开,并共享给其他站点(主体并非本人)使用,包括但不限于:IP地址、设备信息、地理位置

Cookies政策

  • 创建 [blogRoot]/source/cookies/index.md 页面,配置以下内容
1
2
3
4
5
6
7
8
9
---
title: Cookies
date: 2023-03-14 13:07:26
top_img: false
aside: false
comments: false
---

<!-- 页面内容 -->
  • 新增 [blogRoot]/source/cookies/index.md 页面内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
我使用Cookies来保持我的网站和我开发的软件的可靠性,安全性和个性化。当你接受Cookies时,这有助于通过我识别你的身份、记住你的偏好、或提供个性化用户体验来帮助我改善网站

本政策应与我的 [**隐私政策**](/privacy/) 一起阅读,该隐私政策解释了我如何使用个人信息

如果你对我使用你的个人信息或Cookies的方式有任何疑问,请通过 `meuicat_718@163.com` 与我联系

如果你想管理你的Cookies,请按照下面“如何管理Cookies”部分中的说明进行操作。


# 什么是Cookies?

Cookies是一种小型文本文件,当你访问网站时,网站可能会将这些文件放在你的计算机或设备上。Cookies会帮助网站或其他网站在你下次访问时识别你的设备。网站信标、像素或其他类似文件也可以做同样的事情。我在此政策中使用术语“Cookies”来指代以这种方式收集信息的所有文件

Cookies提供许多功能。例如,他们可以帮助我记住你喜欢深色模式还是浅色模式,分析我网站的效果

大多数网站使用Cookies来收集和保留有关其访问者的个人信息。大多数Cookies收集一般信息,例如访问者如何到达和使用我的网站,他们使用的设备,他们的互联网协议地址(IP地址),他们正在查看的页面及其大致位置(例如,我将能够认识到你正在从深圳访问我的网站)


# Cookies的目的

我将Cookies分为以下类别:

| 用途 | 说明 |
| :----: | :----: |
| 授权 | 你访问我的网站时,我可通过 Cookie 提供正确信息,为你打造个性化的体验。例如:Cookie会告知你通过搜索引擎搜索的具体内容来改善文章的标题优化关键词、或者创建更符合你搜索需求的文章内容 |
| 安全措施 | 我通过 Cookie 启用及支持安全功能,监控和防止可疑活动、欺诈性流量和违反版权协议的行为 |
| 偏好、功能和服务 | 我使用功能性Cookies来让我记住你的偏好,或保存你向我提供的有关你的喜好或其他信息 |
| 个性化广告 | 本站及所属旗下产品、IP没有个性化广告 |
| 网站性能、分析和研究 | 我使用这些cookie来监控网站性能。这使我能够通过快速识别和解决出现的任何问题来提供高质量的体验 |


# 我的网站上的第三方Cookies

我还在我的网站上使用属于上述类别的第三方Cookies,用于以下目的:

* 帮助我监控网站上的流量;
* 识别欺诈或非人为性流量;
* 协助市场调研;
* 改善网站功能;
* 监督我的版权协议和隐私政策的遵守情况

| 第三方服务商 | 用途 |
| :----: | :----: |
| 51.la | 用于统计站内访问情况,进行针对性优化异常 |
| 灵雀应用监控 | 监控系统将网站所发生的程序异常、资源加载异常、网络请求异常上报汇总,同时对页面和资源进行性能监控和卡顿监测,分析不同维度下的耗时情况,快速解决遇到的问题 |
| Twikoo | Twikoo评论服务,自建存储私有,用于本站的评论服务 |


# 如何管理Cookies?

在将Cookie放置在你的计算机或设备上之前,系统会显示一个弹出窗口,要求你同意设置这些Cookie。通过同意放置Cookies,你可以让我为你提供最佳的体验和服务。如果你愿意,你可以通过浏览器设置关闭本站的Cookie来拒绝同意放置Cookies;但是,我网站的部分功能可能无法完全或按预期运行。你有机会允许和/或拒绝使用Cookie。你可以通过访问浏览器设置随时返回到你的Cookie偏好设置以查看和/或删除它们

除了我提供的控件之外,你还可以选择在Internet浏览器中启用或禁用Cookie。大多数互联网浏览器还允许你选择是要禁用所有Cookie还是仅禁用第三方Cookie。默认情况下,大多数互联网浏览器都接受Cookie,但这可以更改。有关详细信息,请参阅Internet浏览器中的帮助菜单或设备随附的文档

以下链接提供了有关如何在所有主流浏览器中控制Cookie的说明:

* [**Google Chrome**](https://support.google.com/chrome/answer/95647?hl=en)
* [**IE**](https://support.microsoft.com/en-us/help/260971/description-of-cookies)
* [**Safari(桌面版)**](https://support.apple.com/guide/safari/manage-cookies-and-website-data-sfri11471/mac)
* [**Safari(移动版)**](https://support.apple.com/en-us/HT201265)
* [**火狐浏览器**](https://support.mozilla.org/en-US/kb/Cookies-information-websites-store-on-your-computer)
* [**Android浏览器**](http://support.google.com/ics/nexus/bin/answer.py?hl=en&answer=2425067)

如你使用其他浏览器,请参阅浏览器制造商提供的文档。
有关Cookies以及如何管理Cookies的更多信息,请访问:

[**wikipedia.org**](https://zh.wikipedia.org/wiki/Cookie) 、 [**allaboutCookies.org**](https://www.allaboutcookies.org/) 或 [**aboutCookies.org**](https://www.aboutcookies.org/)


# 更多信息

有关我数据处理的更多信息,请参阅我的隐私政策。如果你对此Cookie政策有任何疑问,请通过 `meuicat_718@163.com` 与我联系


# 对此Cookie政策的更改

我可能对此Cookie政策所做的任何更改都将发布在此页面上。如果更改很重要,我会在我的主页或应用上明确指出该政策已更新

版权协议

  • 创建 [blogRoot]/source/cc/index.md 页面,配置以下内容
1
2
3
4
5
6
7
8
9
---
title: 版权协议
date: 2023-03-14 13:27:27
top_img: false
aside: false
comments: false
---

<!-- 页面内容 -->
  • 新增 [blogRoot]/source/cc/index.md 页面内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的[署名-非商业性使用-禁止演绎 4.0 国际](https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh)标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便你合理的使用本站的文章

本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁你能够在转载时遵守协议。遵守协议的行为几乎不会对你的目标产生负面影响,鼓励创作环境是每个创作者的期望


# 哪些文章适于本协议?

所有原创内容均在文章标题顶部,以及文章结尾的版权说明部分展示

原创内容的非商用转载必须为完整转载且标注出处的 `带有完整url链接``访问原文` 之类字样的超链接

作为参考资料的情况可以无需完整转载,摘录所需要的部分内容即可,但需标注出处


# 你可以做什么?

只要你遵守本页的许可,你可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者


# 你需要遵守什么样的许可?

### 署名

你必须标注内容的来源,你需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)

### 禁止商用

本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)

### 禁止演绎
* 分享全部内容(无修改)
你需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)

* 分享部分截取内容或者衍生创作
目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。

* 作为参考资料截取部分内容
作为参考资料的情况可以无需完整转载,摘录所需要的部分内容即可,但需标注出处。


# 什么内容会被版权保护

**包括但不限于:**

* 文章封面图片
* 文章标题和正文
* 站点图片素材(不含主题自带素材)


# 例外情况
本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处

本着互联网开放精神,你可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注你的网站地址

关于主题样式的版权信息,可以详见[Butterfly](https://github.com/jerryc127/hexo-theme-butterfly/)主题说明,本站已经历多次版本迭代,[查看具体更新](/update/)


# 网站源代码协议
网站源代码(仅包含css、js)的代码部分采用GPL协议

参考文献