// ==UserScript==
// @name bilibili一键投币
// @namespace www.papercomment.tech
// @version 0.5
// @description 在视频右上角添加快捷按钮帮助用户在全屏和非全屏下一键投币. 投币不需要退出全屏, 过程没有弹出遮挡提示,不需要暂停视频. 方便支持自己喜欢的作者, 投币获得经验5级帐号不再遥不可及.
// @author c4r
// @match https://www.bilibili.com/watchlater/*
// @match https://www.bilibili.com/video/*
// @match https://www.bilibili.com/bangumi/play/*
// @require https://code.jquery.com/jquery-latest.js
// @grant GM_addStyle
// @license MPL-2.0
// ==/UserScript==
(function () {
'use strict';
/**
* 玩法:修改第二层div.c4r的类,可改的类名包括(.initial .success .error .processing .surprise .hide .fade),其中.inital和.success需要保证有且仅有一个存在。
*/
GM_addStyle(`
.processing {
animation: rotate 2s infinite linear;
}
@keyframes rotate {
from {
transform:rotate(0deg);
}
to {
transform:rotate(360deg);
}
}
.initial {
background-color: #cacaca;
height:50%;
width:50%;
top:-7%;
right:-7%;
border-radius:100%;
}
.success {
background-color: #ffffff;
height:50%;
width:50%;
top:-7%;
right:-7%;
border-radius:100%;
}
.error {
background-color: #fd676f;
}
.surprise, #c4r-takecoin:hover .c4r {
height:100%;
width:100%;
top:0;
right:0;
border-radius:100%;
}
.c4r {
transition: all 0.3s ease;
}
.c4rHide{
opacity: 0;
}
.fade {
animation: fade 1s 0.3s forwards;
}
@keyframes fade {
25% {
opacity: 0.25;
}
50% {
opacity: 1;
}
75% {
opacity: 0.25;
}
100% {
opacity: 1;
}
}
.bcoin {
fill: #1890ff;
}
.c4r.initial .c4r-logo,
.c4r.success .bcoin{
display:;
}
.c4r.initial .bcoin,
.c4r.success .c4r-logo{
display: none;
}
`)
// ===========================================================================================
// 全局变量
// -------------------------------------------------------------------------------------------
// let sureButton = [
// '.coin-operated-m .coin-bottom span.bi-btn', // 新, 老版本
// '.coin-sure', // watching list
// '.coin-bottom span.bi-btn', // 未订阅
// '.coin-bottom span.coin-btn' // 旧,新番剧
// ]
// let coinBox = [
// '.coin-box', // 老版本, watching list
// '.coin', //新版本
// '.bangumi-coin-wrap' //旧版番剧
// '.coin-info' // 新版番剧
// ]
let logoShowStatus = []
// let islogoShowTime = false
let isMouseInLogo = false
// ===========================================================================================
// 没有改动类函数...
// -------------------------------------------------------------------------------------------
/**
* 是否为老版本一般视频
*/
function isOldVersion() {
return $('i.icon-move.c-icon-moved').length > 0
}
/**
* 是否为番剧(老版本)
*/
function isBangumiOld() {
return $('div.bangumi-coin-wrap').length > 0
}
function isBangumiNew() {
return $('div.coin-info').length > 0
}
/**
* 是否为稍后再看
*/
function isWatchList() {
return $('.bilibili-player-watchlater-nav-header').length > 0
}
/**
* 是否为新版本一般视频
*/
function isNewVersion() {
return $('.coin:not(.u)').length > 0
}
/**
* 返回投币状态
*/
function isCoinTaken() {
if (isBangumiOld()) {
return $('i.bangumi-coin-d').is(':visible')
} else if (isBangumiNew()) {
return $('div.coin-info.active').length > 0
} else if (isOldVersion()) {
return $('i.icon-move.c-icon-moved').is(':visible')
} else {
// new version , watch list
return $('span.coin.on').length == 1
}
}
// /**
// * 是否关注up
// * bug : 新版, 联合创造返回错误结果
// */
// function isFollowing() {
// if (isOldVersion() || isWatchList()) {
// return $('div.btn.followed').length > 0
// } else if (isBangumiOld()) {
// return $('.func-btns.followed').length > 0
// } else if (isNewVersion()) {
// return $('.b-gz.following').length > 0
// } else {
// console.log("take-coin : error : ", "unknown version")
// return undefined
// }
// }
function islogoForeShow() {
if (isCoinTaken() && logoShowStatus.indexOf("actTakingCoin") == -1) {
// console.log('forec : taken')
return false
} else {
// console.log('forec : logoShowStatus ', logoShowStatus.length)
return logoShowStatus.length > 0
}
}
/**
* 判断视频是否全屏状态
*/
function isVideoInFullscreen() {
if (document.fullscreenElement && document.fullscreenElement.id == 'bilibiliPlayer') {
return true;
}
return false;
}
/**
* 插入投币按钮的html代码
* 包含 :
* - id(string) : coin-gen
* - status(string) : taken, taking, untaken, undefined
* - text : 已投, 处理中, 投币, 错误
*/
function genButton() {
console.log('status : ', isCoinTaken())
let strClass = ''
let strStatus = ''
let strText = ''
if (isOldVersion()) {
} else if (isBangumiOld()) {
} else if (isWatchList()) {
} else {
}
if (isCoinTaken()) {
// 已投币
strClass = 'success'
} else {
strClass = 'initial'
}
return '<div id="c4r-takecoin" style="width: 6.5%;padding-top: 6.5%;position: absolute;overflow: hidden;top: 0px;right: 0px;cursor: pointer;z-index: 100">\
<div id="coin-gen" class="c4r '+ strClass + '" style="position: absolute;">\
<svg class="c4r-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 162.65 162.65"><path d="M102.74,20.66C67.1,13.31,7,103.51,31.89,108.3c13.7,2.65,24.31-4.73,33.83-6.17l13,.31a1.1,1.1,0,0,1,1.43.57,1.08,1.08,0,0,1-.57,1.43c-11,10.93-6.16,8.84-19.75,13-30.17,9.27-57.47,3.07-43.47-33.52C27.2,55.58,71.12,5,105.59,12.2a4.46,4.46,0,1,1-2.85,8.46Z" style="fill:#414042;fill-rule:evenodd"/><path d="M88.73,71.39a74.35,74.35,0,0,1,9.86,22.25c9.45-11.26,23-18.66,35.69-5.72a3.28,3.28,0,0,1-4.22,5c-12.77-4.54-18.35-1.41-26.57,10.46a41.16,41.16,0,0,0-2.9,5.13c.22,8.56-.94,17.53-2.93,27.55-.71,3.53-4.87,24.87-13.45,16.15-6.79-6.9,2.87-39.31,6.21-46,.19-.39.4-.78.6-1.18C90.49,94,88.23,83.34,83.59,75.51a3.28,3.28,0,0,1,5.14-4.07Zm-3.29,73.12a2.36,2.36,0,0,0-.62.85C85.29,144.85,85.3,144.89,85.44,144.51Z" style="fill:#414042;fill-rule:evenodd"/></svg>\
<svg class="bcoin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><path d="M14.89 8.664h3.276c.541 0 .979-.4.979-.892s-.438-.892-.979-.892H9.681c-.541 0-.979.4-.979.892s.438.892.979.892h3.425v1.637a5.64 5.64 0 0 0-5.355 5.616v1.19a.892.892 0 1 0 1.784.001v-1.19a3.855 3.855 0 0 1 3.57-3.831v8.329a.892.892 0 0 0 1.784 0v-8.329a3.855 3.855 0 0 1 3.57 3.831v1.19a.892.892 0 0 0 1.784 0v-1.19a5.64 5.64 0 0 0-5.355-5.616V8.664zM14 26C7.373 26 2 20.627 2 14S7.373 2 14 2s12 5.373 12 12a12.002 12.002 0 0 1-12 12z"/></svg>\
</div>\
</div>'
}
/**
* 返回投币按钮JQ Selector
* @returns {string} JQ Selector
*/
function getCoinBoxSelector() {
if (isOldVersion()) {
return '.coin-box'
} else if (isBangumiOld()) {
return '.bangumi-coin-wrap'
} else if (isBangumiNew()) {
return 'div.coin-info'
} else if (isWatchList()) {
return '.coin-box'
} else if (isNewVersion()) {
return '.coin'
} else {
console.log("take-coin : error : ", "unknown version")
return undefined
}
}
/**
* 返回确认投币的JQ Selector
* @returns {string} JQ Selector
*/
function getSureButtonSelector() {
// console.log('version : ', isFollowing(), isOldVersion(), isBangumiOld(), isWatchList(),isNewVersion())
if ($('.coin-bottom span.bi-btn').length > 0) { // 未订阅
return '.coin-bottom span.bi-btn'
} else {
if (isOldVersion()) {
return '.coin-operated-m .coin-bottom span.bi-btn'
} else if (isBangumiOld() || isBangumiNew()) {
return '.coin-bottom span.coin-btn'
} else if (isWatchList()) {
return '.coin-sure'
} else if (isNewVersion()) {
return '.coin-operated-m .coin-bottom span.bi-btn'
} else {
console.log("take-coin : error : ", "unknown version")
return undefined
}
}
}
/**
* 隐藏"投币确实"的selector
*/
function getHideSureBackgroundSelector() {
if (isWatchList()) {
return '.coin-mask, .coin-wrap'
} else if (isOldVersion() || isNewVersion()) {
return '.bili-dialog-m'
} else if (isBangumiOld()) {
return '.dialog-mask'
} else if (isBangumiNew()) {
return '.coin-dialog-mask'
}
}
// ===========================================================================================
// 功能函数
// -------------------------------------------------------------------------------------------
/**
* 强制隐藏logo
*/
function logoHide() {
$('#coin-gen').addClass('c4rHide')
}
/**
* 根据情况判断隐藏图标
*/
function autoLogoHide() {
if (!islogoForeShow() && !isMouseInLogo) {
logoHide()
}
}
/**
* logo出现
*/
function logoShow() {
$('#coin-gen').removeClass('c4rHide')
}
/**
* 在投币动作结束后, 改变投币按钮状态
* @param {String} status taken, taking, untaken, undefined
* 对应 -> 已投, 处理中, 投币, 错误
*/
function changeCoinTaken(status) {
if (status == 'taken') {
$('#coin-gen').attr('class', 'c4r success surprise')
setTimeout(() => {
if (logoShowStatus.indexOf("actTakingCoin") != -1) {
delete logoShowStatus[logoShowStatus.indexOf("actTakingCoin")]
}
autoLogoHide()
$('#coin-gen').removeClass('surprise')
}, 1000);
} else if (status == 'taking') {
$('#coin-gen').attr('class', 'c4r initial surprise processing')
// $('#coin-gen').attr('class', 'c4r success surprise')
} else if (status == 'untaken') {
$('#coin-gen').attr('class', 'c4r initial')
} else {
$('#coin-gen').attr('class', 'c4r initial error')
if (logoShowStatus.indexOf("actCoinError") == -1) {
logoShowStatus.push("actCoinError")
}
}
}
/**
* 检测进度条
*/
function watchVideo() {
let strStartRemind = 'timeStartRemind'
let strKeepRemind = 'timeKeepRemind'
$('video').on("timeupdate", () => {
let timePoint1_s = 3. / 4. * $('video').get(0).duration
let timePoint1_e = 3. / 4. * $('video').get(0).duration + 3
// console.log("video time : ", $('video').get(0).currentTime)
if ($('video').get(0).currentTime > timePoint1_s
&& $('video').get(0).currentTime < timePoint1_e) {
// 闪烁
if (logoShowStatus.indexOf(strStartRemind) == -1) {
logoShowStatus.push(strStartRemind)
}
if ($("#coin-gen").hasClass("success") || $("#coin-gen").hasClass("error")) {
} else {
$("#coin-gen").addClass('surprise fade')
}
} else if ($('video').get(0).currentTime > timePoint1_e) {
if (logoShowStatus.indexOf(strStartRemind) != -1) {
delete logoShowStatus[logoShowStatus.indexOf(strStartRemind)]
}
if (logoShowStatus.indexOf(strKeepRemind) == -1) {
logoShowStatus.push(strKeepRemind)
}
if ($("#coin-gen").hasClass("success") || $("#coin-gen").hasClass("error")) {
} else {
$("#coin-gen").removeClass('fade').addClass('surprise')
}
}
else {
// $("#coin-gen").removeClass('surprise')
}
if (islogoForeShow()) {
logoShow()
}
});
}
/**
* 视频fullscreen时候要做的事情
*/
function processFullScreen() {
if (isVideoInFullscreen()) { // 视频为全屏
if (isOldVersion() || isWatchList() || isBangumiOld() || isBangumiNew()) {
console.log("Bcoin : start watching hide bar")
observerHide.observe($('.bilibili-player-video-control').get(0),
{
subtree: false, childList: false, characterData: false, attributes: true,
attributeFilter: ["style"], attributeOldValue: true, characterDataOldValue: false
})
} else {
console.log("Bcoin : new version")
observerHide.observe($('#bilibiliPlayer > div.bilibili-player-area').get(0),
{
subtree: false, childList: false, characterData: false, attributes: true,
attributeFilter: ["class"], attributeOldValue: true, characterDataOldValue: false
})
}
} else { // 视频退出全屏
observerHide.disconnect()
// $('#coin-gen').show()
logoShow()
}
// 加载watching list
// if (isVideoInFullscreen()) {
// $("#bcoin-watch-list").append($(".bilibili-player-wraplist").html())
// } else {
// $("#bcoin-watch-list").empty()
// }
}
/**
* 实际运行部分
*/
function watching() {
// 添加按钮
console.log("take-coin : add button")
$('#c4r-takecoin').remove()
logoShowStatus = []
if (isOldVersion() || isWatchList() || isBangumiOld()) {
console.log("oldversion")
if ($('.bilibili-player-video-wrap').length == 0) {
let callbackPlayer = function (mutationList, observer) {
// console.log("coin change : ", mutationList)
mutationList.forEach((mutation) => {
// if($(mutation.target).is('.van-icon-videodetails_throw')){
if ($('.bilibili-player-video-wrap').length > 0 && $('#coin-gen').length == 0) {
// $('#c4r-takecoin').remove()
$('.bilibili-player-video-wrap').append(genButton())
observer.disconnect()
console.log('disconnect coin observe')
}
// }
})
}
let observerPlayer = new MutationObserver(callbackPlayer)
observerPlayer.observe($('#bilibiliPlayer').get(0),
{
subtree: true, childList: true, characterData: false, attributes: true,
attributeOldValue: false, characterDataOldValue: false
})
} else {
$('#c4r-takecoin').remove()
$('.bilibili-player-video-wrap').append(genButton())
}
} else if (isNewVersion()) {
console.log("new version")
$('#c4r-takecoin').remove()
$('#bilibiliPlayer').append(genButton())
if (!$('.coin').hasClass('on')) {
observerNewVersionCoin.observe($('.coin').get(0),
{
subtree: true, childList: true, characterData: false, attributes: true,
attributeFilter: ["class"], attributeOldValue: false, characterDataOldValue: false
})
}
} else if (isBangumiNew()) {
console.log("Bangumi New version")
$('#c4r-takecoin').remove()
$('#bilibiliPlayer').append(genButton())
if ($('.coin-info span').text().trim() == '--') {
observerBangumiNewCoin.observe($('.coin-info').get(0),
{
subtree: true, childList: true, characterData: true, attributes: false,
attributeOldValue: false, characterDataOldValue: false
})
}
} else {
console.log("unknown version")
}
processFullScreen()
watchVideo()
}
/**
* 模拟鼠标
* @param {*} node
* @param {*} eventType
*/
function triggerMouseEvent(node, eventType) {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent(eventType, true, true);
node.dispatchEvent(clickEvent);
}
var clickTimeout = {
_timeout: null,
set: function (fn) {
var that = this
that.clear()
that._timeout = setTimeout(fn, 300)
},
clear: function () {
var that = this
if (that._timeout) {
clearTimeout(that._timeout)
}
}
}
// ===========================================================================================
// observation
// -------------------------------------------------------------------------------------------
/**
* 检查是否视频周边控制器隐藏状态是否变化
*/
let callbackHide = function (mutationList, observer) {
// console.log(mutationList)
mutationList.forEach((mutation) => {
// console.log(mutation.oldValue, $(".bilibili-player-video-control").attr('style'))
if (isOldVersion() || isWatchList() || isBangumiOld() || isBangumiNew()) {
if ($(".bilibili-player-video-control").attr('style') == 'opacity: 0;' ||
$(".bilibili-player-video-control").attr('style') == 'opacity: 1;') {
if ($(".bilibili-player-video-control").attr('style') == 'opacity: 0;') {
// console.log("Bcoin : hide")
// autoLogoHide()
} else {
// console.log("Bcoin : show")
// $('#coin-gen').show()
// logoShow()
}
}
} else {
// 新版
if ($("#bilibiliPlayer > div.bilibili-player-area").hasClass('video-control-show')) {
// $('#coin-gen').show()
// logoShow()
} else {
// autoLogoHide()
}
}
})
}
let observerHide = new MutationObserver(callbackHide)
//-------------------------------------------------------------------------------------------
/**
* 新版coin图标会晚一点加载出来, 用来等待加载coin
*/
let callbackNewVersionCoin = function (mutationList, observer) {
// console.log("coin change : ", mutationList)
mutationList.forEach((mutation) => {
if ($(mutation.target).is('span.coin')) {
// console.log($.trim($('.coin').text()))
// if ($('.coin').hasClass('on')) {
$('#c4r-takecoin').remove()
$('#bilibiliPlayer').append(genButton())
// observer.disconnect()
// console.log('disconnect coin observe')
}
// }
})
}
let observerNewVersionCoin = new MutationObserver(callbackNewVersionCoin)
/**
* 新版banggumi coin图标会晚一点加载出来, 用来等待加载coin
*/
let callbackBangumiNewCoin = function (mutationList, observer) {
// console.log("coin change : ", mutationList)
mutationList.forEach((mutation) => {
// if($(mutation.target).is('.van-icon-videodetails_throw')){
// console.log($.trim($('.coin').text()))
if ($('.coin-info span').text().trim() != '--') {
$('#c4r-takecoin').remove()
$('#bilibiliPlayer').append(genButton())
observer.disconnect()
// console.log('disconnect coin observe')
}
// }
})
}
let observerBangumiNewCoin = new MutationObserver(callbackBangumiNewCoin)
//-------------------------------------------------------------------------------------------
/**
* 检测video变化, 开始添加按钮
*/
let callbackVideo = function (mutationList, observer) {
// console.log(mutationList)
mutationList.forEach((mutation) => {
// 旧版, 以及发生视频变化
if ($(mutation.target).hasClass('bilibili-player-video')) {
console.log('take-coin : 视频变更 ', mutation)
// console.log('take-coin : 视频变更...')
// 添加按钮
// if ($('#coin-gen').length == 0) {
// watching()
// }
observerVideo.disconnect()
console.log('take-coin : continue observing...')
observerVideo.observe($('.player').get(0),
{
subtree: true, childList: true, characterData: false, attributes: true,
attributeFilter: ["src"], attributeOldValue: false, characterDataOldValue: false
})
watching()
}
})
}
let observerVideo = new MutationObserver(callbackVideo)
//-------------------------------------------------------------------------------------------
/**
* 等待投币确认按钮弹出
*/
let callbackCoinBox = function (mutationList, observer) {
let button = getSureButtonSelector()
let isClicked = false
let isDisconnect = false
let hideSelector = getHideSureBackgroundSelector()
// if (isWatchList()) {
// hideSelector = '.coin-mask, .coin-wrap'
// } else if (isOldVersion() || isNewVersion()) {
// hideSelector = '.bili-dialog-m'
// } else if (isBangumiOld()) {
// hideSelector = '.dialog-mask'
// }
// console.log(button, $(button).length, hideSelector, "callbackCoinBox : ", mutationList)
mutationList.forEach((mutation) => {
if ((!isClicked) && mutation.addedNodes.length > 0 && $(button).length > 0) {
// console.log("take-coin :", "click")
$(hideSelector).css('opacity', '0')
$(button).get(0).click()
isClicked = true
}
if ((!isDisconnect) && mutation.removedNodes.length > 0) {
// console.log("take-coin :", "remove surebutton")
setTimeout(() => {
console.log('check : ', isCoinTaken())
if (isCoinTaken()) {
changeCoinTaken('taken')
} else {
changeCoinTaken('unknown')
}
}, 1500)
observer.disconnect()
isDisconnect = true
}
})
}
let observerCoinBox = new MutationObserver(callbackCoinBox)
// ===========================================================================================
// 全局listener
// -------------------------------------------------------------------------------------------
/**
* 全屏变化
*/
document.onfullscreenchange = function (event) {
console.log("FULL SCREEN CHANGE")
processFullScreen()
}
//-------------------------------------------------------------------------------------------
// 检测按钮被按
// 为防止按钮被删, $(document).on 必须放在这里
$(document).on('click', function (event) {
// console.log("click : ", event)
if ($(event.target).closest('#coin-gen.initial').length > 0) {
clickTimeout.set(function () {
console.log("take-coin : 投币")
// if (isOldVersion()) {
// // console.log("old version")
// $('.coin-box').click()
// } else {
// // console.log("other version")
// // new version || watchlist || bangumiOld
// $('.coin').click()
// }
let CoinBoxObserverSelector = ''
if (isWatchList()) {
CoinBoxObserverSelector = 'div[coinnum]'
} else if (isOldVersion() || isNewVersion()) {
CoinBoxObserverSelector = '#app > div'
} else if (isBangumiOld() || isBangumiNew()) {
CoinBoxObserverSelector = '#app'
}
observerCoinBox.observe($(CoinBoxObserverSelector).get(0),
{
subtree: true, childList: true, characterData: false, attributes: false,
// attributeFilter: ["src"],
attributeOldValue: false, characterDataOldValue: false
})
let coinButton = getCoinBoxSelector()
console.log(coinButton, $(coinButton).length)
$(coinButton).get(0).click()
console.log("changeCoinTaken...")
changeCoinTaken('taking')
if (logoShowStatus.indexOf("actTakingCoin") == -1) {
logoShowStatus.push("actTakingCoin")
}
})
}
if ($(event.target).closest('#coin-gen.success').length > 0) {
clickTimeout.set(function () {
$('#coin-gen').addClass('processing')
setTimeout(() => {
$('#coin-gen').removeClass('processing')
}, 2000);
})
}
})
$(document).on('dblclick', function (event) {
// console.log("click : ", event)
if ($(event.target).closest('#coin-gen').length > 0) {
if (isNewVersion() &&
($('span.like.on').length == 0 || (!isCoinTaken()) || $('span.collect.on').length == 0) ) {
console.log("take-coin : 一键三联")
clickTimeout.clear()
let CoinBoxObserverSelector = ''
if (isWatchList()) {
CoinBoxObserverSelector = 'div[coinnum]'
} else if (isOldVersion() || isNewVersion()) {
CoinBoxObserverSelector = '#app > div'
} else if (isBangumiOld() || isBangumiNew()) {
CoinBoxObserverSelector = '#app'
}
observerCoinBox.observe($(CoinBoxObserverSelector).get(0),
{
subtree: true, childList: true, characterData: false, attributes: false,
// attributeFilter: ["src"],
attributeOldValue: false, characterDataOldValue: false
})
let coinButton = getCoinBoxSelector()
// console.log(coinButton, $(coinButton).length)
triggerMouseEvent($('span.like').get(0), "mousedown");
console.log("changeCoinTaken...")
changeCoinTaken('taking')
if (logoShowStatus.indexOf("actTakingCoin") == -1) {
logoShowStatus.push("actTakingCoin")
}
}
}
})
$(document).on('mouseover', function (event) {
if ($(event.target).closest('#coin-gen').length > 0) {
// console.log('take-coin :', 'mousenter')
isMouseInLogo = true
// logoShow()
}
})
$(document).on('mouseout', function (event) {
if ($(event.target).closest('#coin-gen').length > 0) {
// console.log('take-coin :', 'leave')
isMouseInLogo = false
autoLogoHide()
}
})
let mousemoveTimeoutID = 0
$(document).on('mousemove', function (event) {
// console.log('take-coin :', 'mousemove out')
if ($('#coin-gen').length > 0) {
// console.log('take-coin :', 'mousemove')
logoShow()
if (mousemoveTimeoutID) {
clearTimeout(mousemoveTimeoutID)
}
mousemoveTimeoutID = setTimeout(() => {
// console.log('take-coin :', 'Hide')
autoLogoHide()
}, 1500);
}
})
// ===========================================================================================
// ready
// -------------------------------------------------------------------------------------------
$(document).ready(function () {
console.log('take-coin : ready ...')
if ($('.player').length > 0) {
// 添加按钮
watching()
// 检测按钮消失, 重新加载
console.log('take-coin : observing...', $('.player').length)
observerVideo.observe($('.player').get(0),
{
subtree: true, childList: true, characterData: false, attributes: true,
attributeFilter: ["src"], attributeOldValue: false, characterDataOldValue: false
})
} else {
// 在列表页面
// 通过检测是否含有.player元素判断
let callbackGoToWatch = function (mutationList, observer) {
if ($('.player').length > 0) {
// 添加按钮
watching()
// 检测按钮消失, 重新加载
console.log('take-coin : observing...', $('.player').length)
observerVideo.observe($('.player').get(0),
{
subtree: true, childList: true, characterData: false, attributes: true,
attributeFilter: ["src"], attributeOldValue: false, characterDataOldValue: false
})
observer.disconnect()
}
}
let observerGoToWatch = new MutationObserver(callbackGoToWatch)
let strWaitLoadPlayer = ''
if ($('.app-wrap').length > 0) {
strWaitLoadPlayer = '.app-wrap'
} else if ($('#app').length > 0) {
strWaitLoadPlayer = '#app'
}
observerGoToWatch.observe($(strWaitLoadPlayer).get(0),
{
subtree: true, childList: true, characterData: false, attributes: true,
attributeFilter: ["src"], attributeOldValue: false, characterDataOldValue: false
})
}
})
})();