禁漫天堂常見問題指北
首先來簡單的看一下整體結構
src ├── App.vue # 主函式 ├── api │ ├── share.ts # 非主`api`介面, 第三方`api`介面 │ └── v1 # 主`api`介面 ├── callback # 整體的回撥函式, 通常是 `event-handle` 函式 │ └── dark.ts ├── components # 公共元件 │ ├── card-preview.vue # 單個卡片 │ ├── card.vue # 卡片 │ ├── dialog.vue # 彈窗 │ ├── empty.vue │ ├── glass.vue # 毛玻璃 │ ├── list.vue │ ├── reload-button.vue │ ├── test_image.vue │ ├── topbar.vue │ └── wrapper.vue # 最外層包裹層 ├── config # 配置 │ ├── assets.ts │ ├── index.ts │ └── profile.ts ├── const # 常量 │ ├── index.ts │ └── key.ts ├── css │ └── dark.css ├── interface │ ├── enum.ts │ ├── index.ts │ ├── pages.ts │ ├── tool.ts │ └── types.ts ├── main.ts ├── manifest.json ├── pages.json # 頁面配置 ├── plugins │ ├── axios.js # 網路請求 │ ├── html_parse.js │ ├── injection.js # pages.json / package.json 注入 │ ├── qs2string.js │ └── querystring ├── sfc.d.ts ├── static # 靜態資源 │ ├── menu # 選單 │ ├── miku_loading.gif │ └── overlay.png ├── store │ ├── fs.ts │ ├── index.ts │ ├── modules │ └── types.ts ├── uni.scss ├── utils │ ├── axios.ts │ ├── fs.ts │ ├── index.ts │ ├── is.ts │ ├── map.ts │ ├── mirror.ts │ ├── qs.ts │ ├── share.ts │ ├── time.ts │ └── uni.ts └── views ├── blogs ├── detail ├── dev ├── filter ├── guide ├── home ├── index ├── login ├── reader ├── search ├── settings ├── switch ├── theme ├── topic └── webview
最近總有很多群友總是反映一直載入中, 或者乾脆什麼都沒有了, 那麼我給大家解答一下
- 什麼都沒有, 白屏
應該是你下載了舊版本, 現在最新版本是 v20200901
, 白屏我猜測你是 android
的手機, 這是因為有的安卓手機的 js
引擎不支援 ...
展開運算子, 就會導致weex
直接就報錯
- 一直載入中,,,
小初音還是賊可愛的, 但是一直卡著很難受, 我簡單的說一下這是為什麼, 在原始碼 src/utils/mirror.ts
中有映象相關的兩個函式
/** * 設定映象 `url` */ export const setMirror = (ext: string = mirror_default_domain) => { return io.setMirror(ext) } /** * 獲取映象 `url` */ export const getMirror = (): string=> { try { const _domain = io.getMirror() const value = _domain.value as string return value } catch (error) { console.error(error) return mirror_default_domain } }
我們看到這兩個函式用到了 io.getMirror()
和 io.setMirror(ext)
, 這兩個函式是將映象持久化儲存的關鍵, 可以理解為將物品存在盒子裡, 這個兩個操作分別對應了 取
和 存
, 明白了這個, 我們直接看原始碼 src/utils/axios.ts
/** * 映象中介軟體 */ const dynamicMirror = (req: any) => { let _defalut = req.url const temp = new URL(_defalut) const testFlag = temp.host.search('18comic') >= 0 if (testFlag) { const baseUrl = getMirror() // ## 重點在這 ## const baseURL = new URL(baseUrl) const url = new URL(req.url) url.set('hostname', baseURL.hostname) const _r = url.toString() req.url = _r return } req.url = _defalut } axios.interceptor.request = (req: any)=> { dynamicMirror(req) loginMiddleware(req) return req }
我們每一次獲取網路請求之前都會取一次映象, 以獲取重新設定的映象, 我們回到 getMirror()
函式, 你會看到一個 mirror_default_domain
變數, 它在 src/const/key.ts
/**
* 映象預設的域名字尾
*/
export const mirror_default_domain = 'https://18comic.fun'
很遺憾的是這個映象在國內被牆了, 所以我建議大家不要使用這個映象.
我們找到: src/views/switch/flow.vue
, 這個頁面是用來切換映象, 我們瞄一眼它的 import
import Vue from "vue"
import { flowDataFace } from "@/interface/pages"
import { getAllMirror, handleTestApi } from '@/api/v1';
import { blur_default_url } from '@/const';
import { version } from '@/config';
import { mirrorItemInterface } from '@/interface/tool';
import { router } from '@/utils';
import { setMirror, getMirror } from '@/utils/mirror';
import { setFullScreen } from '../../utils/uni';
嗯, 直接找到 getAllMirror
函式, 這個函式是用來獲取所有網站的(或者說可用介面)
export const getAllMirror = async (): Promise<mirrorItemInterface[]>=> {
return defaultMirrorArr
}
繼續找到 defaultMirrorArr
, 這樣我們就找到所有的映象站
export const defaultMirrorArr: mirrorItemInterface[] = [
{
title: 'JM主站',
ext: 'vip',
full_url: 'https://18comic.vip'
},
{
title: '海外分流',
ext: 'org',
full_url: 'https://18comic.org'
},
{
title: 'JM中國主站',
ext: 'fun',
full_url: 'https://18comic1.biz'
},
{
title: "分流1",
ext: "biz",
full_url: "https://18comic2.biz"
},
{
title: "分流2",
ext: "biz",
full_url: "https://18comic3.biz"
}
]
這些網址是從: http://jmcomic.xyz 通過爬蟲取得, 但是我寫死了
具體可參考: https://github.com/waifu-project/18comic_sites/blob/master/utils/index.js
看到這裡, 我想小夥伴們大概明白了, 所謂的卡有可能是單純的映象沒選好而已!!
但是, 設定之後需要重啟, 這裡我解釋一下吧, 重啟是因為介面有快取, 只有重啟之後才會更新, 其實也不需要重啟, 只要不是 tab
的 首頁
+ 主題
就行