1. 程式人生 > 實用技巧 >禁漫天堂常見問題指北

禁漫天堂常見問題指北

首先來簡單的看一下整體結構

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

最近總有很多群友總是反映一直載入中, 或者乾脆什麼都沒有了, 那麼我給大家解答一下

  1. 什麼都沒有, 白屏

應該是你下載了舊版本, 現在最新版本是 v20200901, 白屏我猜測你是 android 的手機, 這是因為有的安卓手機的 js 引擎不支援 ... 展開運算子, 就會導致weex 直接就報錯

  1. 一直載入中,,,

小初音還是賊可愛的, 但是一直卡著很難受, 我簡單的說一下這是為什麼, 在原始碼 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首頁 + 主題 就行