跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

iFun (iF 视频) 去广告 & 增强

※ 最新版本请前往 一帆视频去广告 & 增强 | Jixun 的项目集 获得。

碎碎念 #

原《多瑙影院去广告 & 增强》,网站现在改版叫做《iFun 视频》了,也不知道为啥。

新版的网页前端使用 Angular 开发 + webpack 打包;要改代码就得想办法注入进去。

这个网站用到的 webpack-runtime.js 我给简单的拆解了下:

(function(modules) {
  let cachedModules = {};
  let chunksLoaded = {
    1: 0
  };
  let entryPoints = [];
  function installChunk(data) {
    let chunkId;
    let chunkIds = data[0];
    let moreModules = data[1];
    let entryPoint = data[2];
    let resolves = [];

    for (let chunkIdIdx = 0; chunkIdIdx < chunkIds.length; chunkIdIdx++) {
      chunkId = chunkIds[chunkIdIdx];
      if (Object.prototype.hasOwnProperty.call(chunksLoaded, chunkId) && chunksLoaded[chunkId]) {
        resolves.push(chunksLoaded[chunkId][0]);
      }
      chunksLoaded[chunkId] = 0;
    }
    for (let moduleId in moreModules) {
      if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
        modules[moduleId] = moreModules[moduleId];
      }
    }
    if (origPush) {
      origPush(data);
    }
    while(resolves.length) {
      resolves.shift()();
    }

    entryPoints.push.apply(entryPoints, entryPoint || []);
    return attemptResolve();
  }
  function attemptResolve() {
    let result;
    for (let i = 0; i < entryPoints.length; i++) {
      let runtimeFn = entryPoints[i];
      if (runtimeFn.slice(1).every(x => x === 0)) {
        entryPoints.splice(i--, 1);
        webpackRequire.s = runtimeFn[0];
        result = webpackRequire(runtimeFn[0]);
      }
    }
    return result;
  }
  function webpackRequire(moduleName) {
    if (cachedModules[moduleName])
      return cachedModules[moduleName].exports;

    const module = cachedModules[moduleName] = {
      i: moduleName,
      l: false,
      exports: {}
    };

    modules[moduleName].call(module.exports, module, module.exports, webpackRequire);
    module.l = true;
    return module.exports;
  }

  // 可忽略
  // ...
})([]);

有兴趣的话可以对照用户脚本来改一改来自己实现;我个人也备份了一份脚本副本

脚本功能 #

启用脚本后在后台的截图

基本上实现了去广告;部分广告的去除需要登录一个普通用户。

脚本的原理是将当前登陆的用户伪装成 VIP - 相信你从截图里也能看出来了,啊哈。

如果脚本失效,大概率是不会更新的 - 有兴趣可以对比代码以及上面的副本更新,应该就是改几个字符的关系。

安装 #

安装脚本:主站 | GreasyFork

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区