Greasy Fork

Greasy Fork is available in English.

多瑙影院去广告 & 增强

多瑙网站视频与网站广告去除,以及其他增强功能。

目前为 2017-05-01 提交的版本,查看 最新版本

// ==UserScript==
// @name         多瑙影院去广告 & 增强
// @namespace    moe.jixun.dn-noad
// @version      1.5
// @description  多瑙网站视频与网站广告去除,以及其他增强功能。
// @author       Jixun Moe<https://jixun.moe/>
// @include      http://*.dnvod.eu/*
// @include      https://*.dnvod.eu/*
// @include      http://*.dnvod.tv/*
// @include      https://*.dnvod.tv/*
// @include      http://*.duonao.tv/*
// @include      https://*.duonao.tv/*
// @grant        none
// @compatible   Firefox  Grease Monkey
// @compatible   Chrome   Tamper Monkey
// @compatible   Opera    Violent Monkey
// @run-at       document-start
// ==/UserScript==

const ads = `#msg_winw, .clickbg, .r-gg, #box, .bfq-r,
              [class^="ggw-"], .tgg, #myaudient2,
              .footerwhole, .gg, .custom-contaienr`;

var w = window;
var each = [].forEach;

function remove (el) {
    if (el && el.parentNode) el.parentNode.removeChild(el);
}

function playNextEp () {
    let query = location.search.replace(/&.+/, '');
    let currentEp = document.querySelector('.bfan-n>a[href*="' + query + '"]');
    if (!currentEp) return ; // 未找到当前播放剧集

    let nextEp = currentEp.parentNode.parentNode.nextElementSibling;
    if (!nextEp) return ; // 未找到下一播放剧集

    nextEp = nextEp.querySelector('a');
    if (nextEp) nextEp.click(); // 切换到下一剧集
}

// 移除播放器 logo
function removePlayerLogo () {
    // 改成内置水印也是挺恶心的。
    let ckstyle = w.ckstyle();
    ckstyle.logo = 'null';
    ckstyle.advmarquee = '';
    w.ckstyle = function () { return ckstyle; };
}

// 更新播放器配置
function updateConfig (config) {
    let p = config.container;
    p.l = p.r = p.d = p.u = p.pub_link = p.pub_surl = p.z = p.t = p.te = '';
    p.e = 6;

    let q = config.container.mobile;
    q.sl = q.sr = q.ste = '';

    console.info(config);
}

// Player AD removal.
// 劫持播放器的广告参数
var bakCallback;
var jQuery;

var hookedCallback = function (result) {
    updateConfig(result);
    return bakCallback.apply(this, arguments);
};

var performHook = function () {
    bakCallback = w.theCallBack;
    w.theCallBack = hookedCallback;
};

if (w.$) {
    jQuery = w.$;
    jQuery(performHook);
} else {
    Object.defineProperty(w, '$', {
        get: function () { return jQuery; },
        set: function ($) {
            jQuery = $;
            let ready = $.fn.ready;
            $.fn.ready = function (fn) {
                if (fn.toString().indexOf('theCallBack') != -1) {
                    performHook();
                    $.fn.ready = ready;
                }
                return ready.apply(this, arguments);
            };
        }
    });
}

addEventListener('DOMContentLoaded', function() {
    'use strict';

    // 去广告与播放器调整
    var style = document.createElement('style');
    style.textContent = `
${ads} { display: none !important; }
.bfq { background: black; }
.bfq-l { width: calc(100% - 20px); }
#video > #a1 { margin: auto; text-align: center; }
`;
    document.head.appendChild(style);

    // 删除广告元素
    each.call(document.querySelectorAll(ads), remove);

    // 检测是否需要移除播放器 Logo
    if (w.ckstyle) {
        removePlayerLogo();
    }

    // 检测是否需要实现播放下一集功能
    if (w.playerstop) {
        w.playerstop = playNextEp;
    }
});