Skip to content

logic核心流程

logic的核心流程见下图中蓝色背景区域部分,其主要职责是:

  1. initRulesManager初始化规则管理,即把fetBlockConfig.json从远程拉取到本地并生成该用户最终规则,备用
  2. initHookManager初始化hook拦截。即把浏览器内能拦截的api全部拦截掉,以在拦截到请求后决定是否做域名替换。

代码解析

js
import { init as initRulesManager } from './rulesManager/index.js'
import { init as initHookManager } from './hookManager/index.js'

function startFetBlock() {
    // 0. 防止2次初始化
    if (window._isInitFetBlock) return;

    // 1. 初始化用户规则
    initRulesManager()

    // 2. 初始化用户拦截
    initHookManager();

    // 3. 标记初始化完成
    window._isInitFetBlock = true
}

startFetBlock()

可以看到实际代码总共分为4步,其实第一步和第二步就是上文所讲的initRulesManager和initHookManager两个核心步骤。

以上代码,对应到源码 src/logic/index.js,再次回顾项目结构:

js
    |-stub
        |-main.js // 桩代码主逻辑
    |-logic
        |-index.js // 主流程
        |-rulesManager // 规则管理器
            |-index.js
        |-hookManager
            |-index.js // hook主逻辑(完成对xhr/fetch/open等api的hook)
            |-fetBlockXHR.js // 对原生XHR的class封装
        |-tunnels
            |-index.js // 对外统一tunnel调用入口
            |-jsbridge // jsbridge通道相关api能力
            |-other // 其他通道相关api能力