const{createApp}=Vue const{createVuetify,useGoTo,useDisplay}=Vuetify var data={alert:{show:false,color:'success',text:'',timeout:0,},theme:{dark:false,},nav:{showDrawer:false,showTOC:true,tocPanel:0,tab:'account',post:{discussionId:998,currentPage:1,targetPage:1,total:23,anchor:0,goToOptions:{container:null,duration:0,easing:'easeInOutCubic',offset:-100,},worker:null,task:[],active:[],apiLock:[],originLike:new Map([]),},related:{block:1,}},search:{width:80,text:null,loading:false,},tags:[{id:40,url:'/t/220e502f6a045c7360772b0b0033',name:'CDN',color:'#66BB6A',icon:'mdi-tag-heart',},],posts:[{id:12178,num:0,uid:2291,content:'\u003Cp\u003E即使用支持 ECS 的海外 DOH 带上国内 IP 查询,也只会返回香港/新加坡/日本的 IP 。\u003C/p\u003E\u003Ccode\u003Ecurl -H \u0026#34;accept: application/dns-json\u0026#34; \u0026#34;https://dns.google/resolve?name\u003Dupos-sz-mirroraliov.bilivideo.com\u0026amp;edns_client_subnet\u003D101.6.6.0/24\u0026#34;{\u0026#34;Status\u0026#34;:0,\u0026#34;TC\u0026#34;:false,\u0026#34;RD\u0026#34;:true,\u0026#34;RA\u0026#34;:true,\u0026#34;AD\u0026#34;:false,\u0026#34;CD\u0026#34;:false,\u0026#34;Question\u0026#34;:[{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.\u0026#34;,\u0026#34;type\u0026#34;:1}],\u0026#34;Answer\u0026#34;:[{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.\u0026#34;,\u0026#34;type\u0026#34;:5,\u0026#34;TTL\u0026#34;:156,\u0026#34;data\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.225\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.229\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.231\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.228\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.232\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.227\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.226\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;128.1.157.230\u0026#34;}],\u0026#34;edns_client_subnet\u0026#34;:\u0026#34;101.6.6.0/24\u0026#34;,\u0026#34;Comment\u0026#34;:\u0026#34;Response from 47.89.91.91.\u0026#34;}\u003C/code\u003E\u003Ccode\u003Ecurl -H \u0026#34;accept: application/dns-json\u0026#34; \u0026#34;https://223.5.5.5/resolve?name\u003Dupos-sz-mirroraliov.bilivideo.com\u0026amp;edns_client_subnet\u003D101.6.6.0/24\u0026#34;{\u0026#34;Status\u0026#34;:0,\u0026#34;TC\u0026#34;:false,\u0026#34;RD\u0026#34;:true,\u0026#34;RA\u0026#34;:false,\u0026#34;AD\u0026#34;:false,\u0026#34;CD\u0026#34;:false,\u0026#34;Question\u0026#34;:{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.\u0026#34;,\u0026#34;type\u0026#34;:1},\u0026#34;Answer\u0026#34;:[{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:5,\u0026#34;data\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.235\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.238\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.237\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.234\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.236\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.231\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.232\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;TTL\u0026#34;:60,\u0026#34;type\u0026#34;:1,\u0026#34;data\u0026#34;:\u0026#34;163.181.201.233\u0026#34;}],\u0026#34;edns_client_subnet\u0026#34;:\u0026#34;101.6.6.0/24\u0026#34;\u003C/code\u003E\u003Cp\u003E带上美国 IP 能正常返回美国节点\u003C/p\u003E\u003Ccode\u003Ecurl -H \u0026#34;accept: application/dns-json\u0026#34; \u0026#34;https://dns.google/resolve?name\u003Dupos-sz-mirroraliov.bilivideo.com\u0026amp;edns_client_subnet\u003D89.208.246.0/24\u0026#34;{\u0026#34;Status\u0026#34;:0,\u0026#34;TC\u0026#34;:false,\u0026#34;RD\u0026#34;:true,\u0026#34;RA\u0026#34;:true,\u0026#34;AD\u0026#34;:false,\u0026#34;CD\u0026#34;:false,\u0026#34;Question\u0026#34;:[{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.\u0026#34;,\u0026#34;type\u0026#34;:1}],\u0026#34;Answer\u0026#34;:[{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.\u0026#34;,\u0026#34;type\u0026#34;:5,\u0026#34;TTL\u0026#34;:470,\u0026#34;data\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.202\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.227\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.203\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.228\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.230\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.229\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.201\u0026#34;},{\u0026#34;name\u0026#34;:\u0026#34;upos-sz-mirroraliov.bilivideo.com.queniuaa.com.\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:60,\u0026#34;data\u0026#34;:\u0026#34;8.45.52.204\u0026#34;}],\u0026#34;edns_client_subnet\u0026#34;:\u0026#34;89.208.246.0/24\u0026#34;,\u0026#34;Comment\u0026#34;:\u0026#34;Response from 47.240.195.222.\u0026#34;}\u003C/code\u003E\u003Cp\u003E这个特性让 Chrome 的安全 DNS 挂海外 DOH 时在透明代理环境下没办法正常浏览 B 站,因为代理软件会用 Chrome 给的海外 IP 匹配直连域名规则,连主页都要加载半天。\u003C/p\u003E',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 11:57:21',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12179,num:1,uid:849,content:'出于类似的原因我自建了 DOH 做分流\u003Cbr\u003E现在我最不爽的就是安卓不支持 DOH',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:09:45',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12180,num:2,uid:3651,content:'装个 adguard ,就可以用 doh 了。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:11:26',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12181,num:3,uid:2291,content:'我最后买别人自建的国内 DOH 。又想用安全 DNS 的稳私保护又想不影响国内解析只能在国内建 DOH',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:11:58',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12182,num:4,uid:88,content:'阿 b 确实特立独行,就是因为这个,我选择不看',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:13:25',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12183,num:5,uid:2291,content:'不差梯子流量的话其实也可以用代理看 B 站,体验还更好 ww',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:15:24',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[6,],mentionUsers:[],likeUsers:[],},{id:12184,num:6,uid:88,content:'#5 我的根本加载不出阿 b ,用 7 、8 年的没法割舍,加上阿 b 为了盈利越来越抽象,所以直接放弃阿 b',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:19:42',updatedAt:'2025-03-12 13:23:06',mentionNum:5,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12185,num:7,uid:4578,content:'upos-sz-mirroraliov.bilivideo.com\u003Cbr\u003Emirroraliov\u003Cbr\u003E\u003Cbr\u003Emirror\u003Cbr\u003Ealiyun\u003Cbr\u003Eoversea\u003Cbr\u003E\u003Cbr\u003E这个域名就是 oversea 专供',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:26:22',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12186,num:8,uid:4579,content:'安卓好像支持的吧',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:30:34',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12187,num:9,uid:2291,content:'怪不得😂 我换查国内 CDN 域名用 curl 查就正常了。然而 B 站似乎会用访问主页的域名来决定要不要分配海外域名,我每次开安全 DNS 就是连主页都要加载很久,都怀疑会不会 Edge 的安全 DNS 根本不传遞 ECS ?',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:33:24',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12188,num:10,uid:2291,content:'iOS 也不支持系统级 DoH ,得用描述文件。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:34:12',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12189,num:11,uid:4580,content:'安卓显然是支持 DOH 的',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:35:35',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12190,num:12,uid:45,content:'不奇怪,仍然有一大堆权威 DNS 不支持 client subnet 选项',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 12:36:33',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12191,num:13,uid:2513,content:'Response from 不一致,怎么感觉是阿里云 dns 的问题',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 15:09:59',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12192,num:14,uid:777,content:'自建 DoH 不支持分流吗? 加一条类似的规则就可以让 B 站解析走国内了.\u003Cbr\u003E\u003Cbr\u003E[/bilibili.com/bilivideo.com/]223.5.5.5\u003Cbr\u003E\u003Cbr\u003E![]( \u003Cimg src\u003D\"https://i.imgur.com/I4ZpjV7.png\"\u003E)',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 15:43:26',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12193,num:15,uid:223,content:'是的,国内的返回国内的,海外的返回海外的节点,两个大区无法互跨。\u003Cbr\u003E\u003Cbr\u003E这里就不得不安利一下本站某个老哥(就是我)写的脚本了:\u003Cbr\u003Ehttps://www.v2ex.com/t/1112897\u003Cbr\u003E\u003Cbr\u003E能够手动切换各大城市的 cdn 节点,非常方便进行这类测试。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 15:58:31',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12194,num:16,uid:4174,content:'用 fallback 模式就能避免解析到国外去,或者自建带测速 dns',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 16:56:47',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12195,num:17,uid:2291,content:'只要瀏覽器裡開安全 DNS 就沒 fallback 模式什麼事了,直接把你判定成海外用戶然後送帶 ov 的 cdn 地址給你。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-10 17:00:48',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12196,num:18,uid:1295,content:' #5\u003Cbr\u003E代理到海外怎么会体验更好。。海外体验老差了,不但各地区 cdn 差异大,不同视频也会被区别对待,非热门视频经常卡到 1080 高码率都看一秒卡一秒\u003Cbr\u003E\u003Cbr\u003E# 如果住在国内\u003Cbr\u003Eupos-sz-mirrorali.bilivideo.com \u003D server:quic://dns.alidns.com\u003Cbr\u003Eupos-sz-mirrorali?.bilivideo.com \u003D server:quic://dns.alidns.com\u003Cbr\u003Eupos-sz-mirrorali??.bilivideo.com \u003D server:quic://dns.alidns.com\u003Cbr\u003Eupos-sz-mirrorbos.bilivideo.com \u003D server:180.76.76.76\u003Cbr\u003Eupos-sz-upcdnbd??.bilivideo.com \u003D server:180.76.76.76\u003Cbr\u003Eupos-sz-mirrorcos.bilivideo.com \u003D server:https://doh.pub/dns-query\u003Cbr\u003Eupos-sz-mirrorcos?.bilivideo.com \u003D server:https://doh.pub/dns-query\u003Cbr\u003Eupos-sz-mirrorcos??.bilivideo.com \u003D server:https://doh.pub/dns-query\u003Cbr\u003Eupos-sz-upcdntx.bilivideo.com \u003D server:https://doh.pub/dns-query',ipRegion:'',updatedByUid:0,createdAt:'2025-03-11 14:38:52',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:12197,num:19,uid:1295,content:'顺带一提,阿里 h3 经常出问题,服务端会卡住无返回。。不要将上述规则中的阿里 quic 换成 h3',ipRegion:'',updatedByUid:0,createdAt:'2025-03-11 14:51:11',updatedAt:'2025-03-12 13:23:06',mentionNum:0,mentionedBy:[21,],mentionUsers:[],likeUsers:[],},],usersMap:new Map([[88,{uid:88,url:'/u/0e10641f6a045c7760625e6f023f040e',avatar:'/a/0e10641f6a045c7760625e6f023f040e',username:'wyntalgeer🤖',}],[4579,{uid:4579,url:'/u/693a46236a045c73656d5f6f432d647e',avatar:'/a/693a46236a045c73656d5f6f432d647e',username:'ho121🤖',}],[849,{uid:849,url:'/u/1f187e076a045c77686e5f6f141b172d',avatar:'/a/1f187e076a045c77686e5f6f141b172d',username:'strobber16🤖',}],[45,{uid:45,url:'/u/6c2a512c6a045c77606e536f4f1d3e72',avatar:'/a/6c2a512c6a045c77606e536f4f1d3e72',username:'ysc3839🤖',}],[1295,{uid:1295,url:'/u/1510761f6a045c766263536f332e2b2b',avatar:'/a/1510761f6a045c766263536f332e2b2b',username:'234ygg🤖',}],[4174,{uid:4174,url:'/u/0201575a6a045c73616d526f003e3032',avatar:'/a/0201575a6a045c73616d526f003e3032',username:'htfcuddles🤖',}],[223,{uid:223,url:'/u/1e716b276a045c776268556f365b2902',avatar:'/a/1e716b276a045c776268556f365b2902',username:'kandaakihito🤖',}],[777,{uid:777,url:'/u/1700703a6a045c77676d516f05301506',avatar:'/a/1700703a6a045c77676d516f05301506',username:'jqknono🤖',}],[2513,{uid:2513,url:'/u/033d5b226a045c75656b556f3425383f',avatar:'/a/033d5b226a045c75656b556f3425383f',username:'hackroad🤖',}],[3651,{uid:3651,url:'/u/2f2b68036a045c74666f576f3f2f0903',avatar:'/a/2f2b68036a045c74666f576f3f2f0903',username:'Vneix🤖',}],[4578,{uid:4578,url:'/u/6e24591a6a045c73656d5e6f3513192c',avatar:'/a/6e24591a6a045c73656d5e6f3513192c',username:'yuzo555🤖',}],[4580,{uid:4580,url:'/u/393f745b6a045c736562566f01230333',avatar:'/a/393f745b6a045c736562566f01230333',username:'yujizmq🤖',}],[2291,{uid:2291,url:'/u/0e3a565c6a045c756263576f03261174',avatar:'/a/0e3a565c6a045c756263576f03261174',username:'383394544🤖',}],]),related:[{title:'腾讯云CDN现在不送每月流量了吗?',url:'/d/6f78655a6a045c77606a56754f59656a36193136',},{title:'套腾讯CDN需要备案么',url:'/d/0a274b096a045c77606a5675405e6b6a20742108',},{title:'求亚太地区的CDN,价格在60/T都可以,稳定一点',url:'/d/18256b5d6a045c77606a5677445c666a2374673c',},{title:'求国内CDN推荐,已备案',url:'/d/16064a006a045c77606a56764150656a58123431',},{title:'【将盾安全CDN】活动抽奖中',url:'/d/6c13455c6a045c77606a5676435a676a3d27623a',},{title:'【将盾安全CDN】低价CDN|高速节点|低价流量包|随心退',url:'/d/027053196a045c77606a56764459656a5b136714',},{title:'使用 cloudfront 加速一个 emby 站点只能打开首页登陆不了',url:'/d/1e2b59046a045c77606a5670475f646a02193e1d',},{title:'不懂就问,这是哪家的cdn?',url:'/d/3f2473546a045c77606a567343596a6a3e336738',},{title:'找几个好兄弟合租国内cdn和雷池专业版waf',url:'/d/182265556a045c77606a56724f5a606a16310222',},{title:'关于cdn的小白问题',url:'/d/287a7b556a045c77606a567242516a6a552d3f16',},{title:'有没有大流量的cdn啊,月300t',url:'/d/6f05071c6a045c77606a5672445d666a00332a27',},],} const App={setup(){const goTo=useGoTo() const{mdAndUp}=useDisplay() return{goTo,mdAndUp}},data(){return data;},mounted(){const themeDark=localStorage.getItem("themeDark") if(themeDark!==null){this.theme.dark=JSON.parse(themeDark)} if(this.nav.post.total>(this.nav.post.currentPage-1)*100+20){let moreLen=100 if(this.nav.post.total({id:null,num:(this.nav.post.currentPage-1)*100+v,uid:null,content:null,ipRegion:null,updatedByUid:null,createdAt:null,updatedAt:null,mentionNum:null,mentionedBy:null,mentionUsers:null,likeUsers:null,})) this.posts.push(...morePosts.slice(20))} this.workerStart() const hash=window.location.hash const match=hash.match(/#(\d+)/) if(match){const n=parseInt(match[1],10) if(n>=(this.nav.post.currentPage-1)*100&&n{this.jumpTo(n)})}} this.$nextTick(()=>{this.addHeadingIds() tocbot.init({tocSelector:'.toc',contentSelector:'#post-content-0',headingSelector:'h2, h3, h4',headingsOffset:100,scrollSmoothOffset:-100,scrollSmooth:true,collapseDepth:6,onClick:function(e){setTimeout(()=>{history.replaceState(null,'',window.location.pathname+window.location.search)},0)},}) tocbot.refresh()});},beforeUnmount(){this.workerStop() if(this.quill){this.quill.destroy() this.quill=null}},computed:{dposts(){return this.posts.slice(20);},},created(){},methods:{successAlert(msg){this.alert={show:true,color:'success',text:msg,timeout:1500,}},failureAlert(msg){this.alert={show:true,color:'error',text:msg,timeout:5000,}},flipThemeDark(){this.theme.dark=!this.theme.dark localStorage.setItem("themeDark",JSON.stringify(this.theme.dark))},toSearch(){if(!this.search.text){this.failureAlert('搜索词不能为空') return} let keywords=this.search.text.trim() if(keywords.length<1){this.failureAlert('搜索词不能为空') return} if(keywords.length>100){this.failureAlert('搜索词过长') return} this.doSearch(keywords)},toReg(){window.location.href="/reg"},toLogin(){window.location.href="/login"},toPage(){let url=window.location.href url=url.replace(/(\/\d+)?(#[0-9]+)?$/,this.nav.post.targetPage>1?`/${this.nav.post.targetPage}`:'') window.location.href=url},toLoadRelated({done}){if(this.my&&this.my.uid){this.apiLoadRelated({done})}else{done('ok')}},workerStart(){this.nav.post.worker=setInterval(()=>{this.workerLoad()},500);},workerStop(){if(this.nav.post.worker){clearInterval(this.nav.post.worker);this.nav.post.worker=null;}},async jumpTo(num){const page=Math.floor(num/100)+1 const i=num-(page-1)*100 if(page===this.nav.post.currentPage){this.goTo("#post-"+num,this.nav.post.goToOptions) if(!this.posts[i].id){const block=Math.floor(num/20)+1 this.nav.post.apiLock[block]=true await this.apiLoadPosts(block) this.$nextTick(()=>{this.goTo("#post-"+num,this.nav.post.goToOptions)})}}else{let url=window.location.href url=url.replace(/(\/\d+)?(#[0-9]+)?$/,page>1?`/${page}`:'') url=url+"#"+num window.location.href=url}},postIntersect(num){return(isIntersecting,entries,observer)=>{if(isIntersecting){this.nav.post.task.push(num) this.nav.post.active.push(num) this.nav.post.active=this.nav.post.active.filter(item=>Math.abs(item-num)<=5) this.nav.post.active.sort((a,b)=>a-b)}else{this.nav.post.active=this.nav.post.active.filter(item=>item!==num)} if(this.nav.post.active[0]){this.nav.post.anchor=this.nav.post.active[0]}else{this.nav.post.anchor=0}}},async apiLoadPosts(block){try{const response=await axios.post('/fapi/v1/post/block/'+block,{discussionId:this.nav.post.discussionId,}) if(response.data.code===0){response.data.data.posts.forEach(post=>{const i=post.num%100 Object.assign(this.posts[i],post)}) response.data.data.users.forEach(user=>{this.usersMap.set(user.uid,user)})}else{this.failureAlert('回帖数据加载失败: '+response.data.msg)}}catch(error){this.failureAlert('回帖数据加载失败: '+error)} this.nav.post.apiLock[block]=false},workerLoad(){while(this.nav.post.task.length){const num=this.nav.post.task.pop() const i=num-(this.nav.post.currentPage-1)*100 if(!this.posts[i].id){const block=Math.floor(num/20)+1 if(!this.nav.post.apiLock[block]){this.nav.post.apiLock[block]=true this.apiLoadPosts(block)}}}},getTimeInfo(t){if(!t){return ""} const now=new Date();const then=new Date(t);const diff=now-then;const minute=60*1000;const hour=minute*60;const day=hour*24;const month=day*30;const year=month*12;if(diffpost.num===num) if(!post){return "#"+num} const uid=post.uid const username=this.usersMap.get(uid)?.username if(!username){return "#"+num} return username},getUsernameByPostId(id){const post=this.posts.find(post=>post.id===id) if(!post){return "#"+this.getPostNumByPostId(id)} const uid=post.uid const username=this.usersMap.get(uid).username if(!username){return "#"+this.getPostNumByPostId(id)} return username},getPostNumByPostId(id){const post=this.posts.find(post=>post.id===id) return post.num},getPostById(id){const post=this.posts.find(post=>post.id===id) return post},getPostByNum(num){const post=this.posts.find(post=>post.num===num) return post},getAvatarByUid(uid){const avatar=this.usersMap.get(uid)?.avatar if(!avatar){return this.getRandomAvatar()} return avatar},getAvatarByPostNum(num){const post=this.posts.find(post=>post.num===num) if(!post){return this.getRandomAvatar()} const uid=post.uid return this.getAvatarByUid(uid)},getRandomAvatar(){const num=Math.floor(Math.random()*100) return "https://randomuser.me/api/portraits/men/"+num+".jpg"},getUrlByUid(uid){const url=this.usersMap.get(uid)?.url if(!url){return ""} return url},getTextByPostNum(num){const post=this.posts.find(post=>post.num===num) if(!post||!post.content){return '点击跳转到#'+num+'查看'} const parser=new DOMParser() const doc=parser.parseFromString(post.content,'text/html') const text=doc.body.textContent||'' return text.slice(0,100)},addHeadingIds(){const content=document.getElementById('post-content-0') if(!content){this.nav.showTOC=false return} const headings=content.querySelectorAll('h2, h3, h4') headings.forEach((heading,index)=>{if(!heading.id){heading.id=`toc-nav-${index}`}}) if(headings.length==0){this.nav.showTOC=false}},async doSearch(keywords){this.search.loading=true try{const response=await axios.post('/fapi/v1/search',{keywords:keywords,}) if(response.data.code===0){if(response.data.data.hash&&response.data.data.hash.length===32){window.location.href="/s/"+response.data.data.hash}else{this.failureAlert('搜索失败: 搜索服务异常')}}else{this.failureAlert('搜索失败: '+response.data.msg)}}catch(error){this.failureAlert('搜索失败: '+error)} this.search.loading=false},debounce(fn,delay){let timer=null return function(...args){if(timer)clearTimeout(timer) timer=setTimeout(()=>{fn.apply(this,args)},delay);};},},watch:{'nav.post.targetPage':{handler:async function(newV,oldV){this.toPage()},immediate:false},},} const vuetify=createVuetify({defaults:{global:{ripple:true,},},}) const app=createApp(App) app.use(vuetify).mount("#app")