// ==UserScript==
// @name 在B站(Bilibili)网页上手动标记已看过的视频
// @version 3.2.0
// @description 在B站的网页上手动标记哪些视频是已经看过的,直观区分已看和未看的视频,减少多次打开同一视频的操作。支持大部分的页面。
// @author Truazusa
// @namespace BiliSearchViewed
// @match https://search.bilibili.com/*
// @match https://space.bilibili.com/*
// @match https://t.bilibili.com/*
// @match https://www.bilibili.com/*
// 20220607注:域名static.hdslb.com是B站本身的网站
// @require https://static.hdslb.com/js/jquery.min.js
// @grant unsafeWindow
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValues
// ==/UserScript==
// 透明度设置修改下面三个变量:数值越小越透明,1不透明、0完全透明
// ***********************************************************
// 全局:视频封面(已看):透明度 设定(0.0-1.0)
var opacityIsViewCover = 0.1;
// 全局:未看按钮:透明度 设定(0.0-1.0)
var opacitybtnView = 0.7;
// 全局:已看按钮:透明度 设定(0.0-1.0)
var opacitybtnIsView = 0.3;
// ***********************************************************
var GM_addStyle = GM_addStyle || function(css) {
var style = document.createElement("style");
style.type = "text/css";
style.appendChild(document.createTextNode(css));
document.getElementsByTagName("head")[0].appendChild(style);
};
// 增加自定义样式
var staticStyle = `
.btnView{opacity:`+opacitybtnView+`;width:30px;line-height:16px;font-size:12px;text-align:center;cursor:pointer;display:inline-block;position:absolute;right:0;top:0;z-index:2;border:1px solid #999;border-radius:3px;padding:3px 5px;background:#fff;color:#999;}
.btnIsView{opacity:`+opacitybtnIsView+`;background:rgba(255,255,255,0.5);}
.btnView:hover{opacity:1;background:#aaa;color:#fff;}
.btnIsView:hover{background:rgba(255,255,255,1);opacity:1;color:#999;}
.btnRefresh{display:inline-block;position:absolute;z-index:1;right:52px;top:18px;background:#fff;border:1px solid #999;border-radius:5px;color:#999;padding:1px 5px;}
.btnRefresh:hover{background:#aaa;color:#fff;}
.btnList{display:inline-block;position:absolute;z-index:1;right:97px;top:18px;background:#fff;border:1px solid #999;border-radius:5px;color:#999;padding:1px 5px;}
.btnList:hover{background:#aaa;color:#fff;}
.btnListSave{display:inline-block;position:absolute;z-index:1;right:170px;top:18px;background:#fff;border:1px solid #999;border-radius:5px;color:#999;padding:1px 5px;display:none;}
.btnListSave:hover{background:#aaa;color:#fff;}
.viewList{width:100%;height:120px;display:none;color:#999;padding:1px 5px;}
/*通用属性*/
.__scale-wrap .btnView{right:unset;width:40px;line-height:16px;}`;
var searchStyle = `
/*搜索结果页*/
.u-videos .btnView{left:0;top:0;right:unset;}
.video-item{position:relative;}
/*202303选新版*/
.__scale-wrap .btnView{right:unset;width:40px;line-height:16px;}
/*202303选旧版*/
.video-item .img{background-image:none;}
/*自定义的按钮*/
.vui_tabs--navbar .btnList{top:11px;right:50px;cursor:pointer;}
.vui_tabs--navbar .btnRefresh{top:11px;right:0;cursor:pointer;}
.vui_tabs--navbar .btnListSave{top:11px;right:133px;cursor:pointer;}
.vui_tabs--navbar .viewList{margin:10px 0;}
/*图文模式*/
.list .btnView{left:0;top:20px;right:unset;}
/*番剧搜索结果*/
.media-card-content-footer-btns{height:45px!important;}
.media-card .btnView{right:unset;width:38px;}
.p_relativeSpan{position:relative;padding:0 0 22px;display:inline-block;}
.p_relativeSpan .btnView{left:-1px;top:unset;bottom:0;position:absolute;border:none;}
.media-footerClone{position:absolute;}
.media-footerClone a{margin-right:8px;}
.media-footerClone .media-footer-badge{top:-14px;}
.bangumi-pgc-list .media-item{overflow-y:auto;}
/*综艺搜索结果*/
.selConSpan{position:relative;}
.selConSpan .btnView{right:unset;width:36px;left:8px;top:8px;}
.media-footer-select-content-item{padding:0 6px 0 48px!important;}`;
var spaceStyle = `
/*别人的空间页:space.bili*/
.small-item .btnView{top:10px;right:unset;z-index:10;}
.btnSpaceRefresh{display:inline-block;cursor:pointer;position:absolute;line-height:25px;z-index:1;right:30%;top:19px;background:#fff;border:1px solid #999;border-radius:5px;color:#999;padding:1px 5px;font-size:14px;}
.btnSpaceRefresh:hover{background:#aaa;color:#fff;}
.i-pin-part .content .btnView{right:unset;z-index:10;}
.small-item .cover{background:none!important;}
.i-pin-cover{background:none!important;}
/*合集和列表*/
.s-space .video-card .btnView{top:10px;right:10px;}
/*空间页-动态*/
.video-container .btnView{top:0;right:unset;cursor:pointer;z-index:10;font-size:12px;}
.bili-dyn-content__orig__major{position:relative;}
.bili-dyn-content__orig__major .btnView{top:0;right:unset;cursor:pointer;z-index:10;font-size:12px;}
/*空间页-频道*/
.channel-detail .btnView{top:20px;right:unset;cursor:pointer;z-index:10;}
/*空间页-主页-代表作*/
#i-masterpiece .small-item .btnView{left:10px;top:0;}
/*收藏页*/
.fav-video-list .small-item .btnView{left:0;top:0;}
/*顶部进入的动态:t.bili*/
.new-topic-panel .btnSpaceRefresh{position:static;top:0;margin:30px 0 0 0;}
.dyn-topic-panel .btnSpaceRefresh{position:relative;z-index:1;top:10px;right:unset;}
.right .btnSpaceRefresh{top:unset;right:unset;margin-top:10px;}
.left .btnSpaceRefresh{top:unset;right:0;margin-top:15px;}
/*图文模式*/
.list-list .list-item .btnView{left:0;top:20px;right:unset;}
.video .content div.small-item:nth-child(4n+1) .btnView{left:0;right:unset;}`;
var historyStyle = `
/*历史页*/
.history-wrap .btnView{left:0;}
.history-wrap .btnRefresh{cursor:pointer;top:3px;right:unset;margin:0 0 0 85px;}
.history-wrap .lazy-img{background:none;}`;
var videoStyle = `
/*视频观看页*/
.rec-title .btnRefresh{position:unset;font-size:12px;}
.rigth-btn .btnRefresh{position:relative;font-size:12px;line-height:22px;top:0;right:12px;}
.video-data .btnView{position:unset;margin:0 0 0 10px;border:none;width:35px;}
.video-episode-card__info .btnView{right:0;bottom:0px;position:relative;margin:0 7px 0 0;width:30px;font-size:12px;padding:0px 3px;border:1px solid #999;}
.card-box .btnView{right:auto;left:0;}
.cover-link-image .btnView{width:25px;height:14px;}
.video-sections-v1 .video-section-title{z-index:3!important;}
.video-episode-card__cover .btnView{line-height:12px;width:25px;}
.bpx-player-ending-related-itemDiv{position:relative;float:left}
.bpx-player-ending-related-itemDiv .btnView{position:absolute;left:0;opacity:0.9;}
.bpx-player-ending-related-itemDiv .btnIsView{opacity:0.7;}
/*2022年5月新版:视频观看页*/
#arc_toolbar_report .toolbar-right .btnRefresh{right:0;top:0;position:relative;}
/*播放结束后出现的推荐视频*/
.video-info-v1{position:relative;z-index:999;}
/*视频观看页:分P列表*/
#multi_page ul .btnView{position:relative;color:#999;float:left;line-height:16px;width:24px;margin:3px 5px 0 0;text-align:center;}
#multi_page ul .btnView:hover{color:#fff;}
/*cube模式*/
#multi_page .module-box .btnView{position:relative;margin:0;width:63px;line-height:12px;color:#999;border:none;border-radius:1px;}
.multi-page .cur-list .module-box li{overflow:hidden;line-height:18px;}
.multi-page-v1.small-mode .cur-list .module-box li{height:45px;}
.multi-page-v1 .cur-list .list-box li.on{padding:0 10px 0 10px;}
/*202303选旧版:*/
.video-episode-card .lazy-img{background:none;}
.multi-page .cur-list .list-box li.on{padding:0 10px 0 10px;}
.video-sections .video-section-title{z-index:3!important;}
/*202305选新版*/
.video-toolbar-right .btnRefresh{position:relative;font-size:12px;line-height:22px;top:0;right:0;}
/*202306选新版*/
.video-info-detail .btnView{position:unset;margin:0 0 0 10px;border:none;width:35px;}
/*202403版本*/
.video-info-detail-list .pubdate-ip .btnView{position:unset;margin:0 0 0 10px;border:none;width:35px;}
/*202410版本*/
.simple-base-item .btnView{right:0;bottom:0px;position:relative;margin:0 7px 0 0;line-height:20px;width:30px;font-size:12px;padding:0px 3px;border:1px solid #999;}
.normal-base-item .cover{position:relative;}
.normal-base-item .cover .btnView{right:unset;}
`;
var festivalVideoStyle = `
/*202303活动视频播放页*/
.video-section-title{z-index:3!important;}
.video-episode-card__cover .btnView{line-height:12px;width:25px;} /*跟视频页重复的*/
.recommend-video-card{position:relative;}
.recommend-video-card .btnView{right:unset;top:6px;line-height:12px;width:25px;}
.video-toolbar-content_right .btnRefresh{position:relative;top:0;right:15px;line-height:21px;border-radius:2px;}
.video-toolbar-content_left .btnView{position:relative;line-height:16px;height:16px;top:9px;}`;
var watchlaterStyle = `
/*稍后再看-列表页*/
.watch-later-list .btnView{left:50px;}
.watch-later-list .btnRefresh{cursor:pointer;top:3px;right:unset;margin:0 0 0 35px;position:unset;}
.watch-later-list .lazy-img{background:none;}`;
var listPlayStyle = `
/*稍后再看-视频观看页*/
.tip-info .btnRefresh{font-size:12px;position:absolute;right:0;}
.player-auxiliary-playlist-item{position:relative;}
.player-auxiliary-playlist-item .btnView{position:absolute;top:6px;left:65px;}
.player-auxiliary-playlist-item:first-child .btnView{top:0;}
/*稍后再看-视频观看页at202303*/
.main .btnView{left:0;width:25px;line-height:12px;}
.multip-list-item .left-part{position:relative;padding:0 0 0 40px;}
.multip-list .multip-list-item-active[data-v-079b367a]{padding:0 10px;}
.multip-list-item .btnView{left:0;width:25px;line-height:12px;}
.video-info-detail-list .btnView{position:unset;margin:0;border:none;width:35px;}
.video-toolbar-right .btnRefresh{right:0;top:0;position:relative;}`;
var popularStyle = `
/*综合热门、每周必看、入站必刷*/
.popular-video-container .btnView{width:40px}
.weekly-list .weekly-header .panel{z-index:2;}
/*排行榜*/
.popular-container .rank-container .rank-list .rank-item .btnView{font-size:14px;width:45px;height:24px;}
/*全站音乐榜*/
._card_1kuml_6 .btnView{top:unset;left:12px;bottom:72px;border:1px solid #999;font-size:12px;}
/*短剧榜*/
.drama-board-listClone{justify-content:space-between;flex-wrap:wrap;display:flex;height:0;}
.board-item-wrapDiv{margin-bottom:30px;position:relative;float:left;}
.board-item-wrapDiv .btnView{right:unset;top:16px;left:182px;}`;
var indexStyle = `
/*首页(202303选新版)*/
.bili-movie-card .btnView{width:40px;}
/*番剧Item*/
.bili-bangumi-card{position:relative;}
.bili-bangumi-card .btnView{position:absolute;width:40px;}
/*首页(202303选旧版)*/
.video-card-reco .info-box{background-image:none;}
.video-card-reco .btnView{width:40px;z-index:3;}
.video-card-common .card-pic .btnView{border:1px solid #999;width:45px;height:25px;position:absolute;background:#fff;color:#999;}
.video-card-common .card-pic .btnView:before{border:1px solid #999;width:45px;height:25px;background:#fff;color:#999;content:unset;}
.video-card-common .card-pic a{background-image:none;}
.rank-wrap .btnView{width:36px;line-height:12px;position:unset;}
.rank-wrap .preview{width:299px;}.rank-wrap .title{width:260px;}
@media screen and (max-width: 1438px) {
.rank-list .rank-wrap .preview{width:244px!important;}.rank-list .rank-wrap .title{width:205px!important;}
}
.rank-wrap .pic .btnView{position:absolute;right:unset;}`;
var channelStyle = `
/*频道*/
.card-list .btnView{left:unset;top:0;right:0;width:40px;}`;
var bangumiStyle = `
/*bangumi视频观看页*/
.toolbar_toolbar__NJCNy .btnRefresh{right:0;cursor:pointer;}
/*202403版本*/
.toolbar .btnRefresh{right:0;top:14px;cursor:pointer;}
/*主视频*/
.toolbar_toolbar__NJCNy .btnView{right:unset;width:36px;top:20px;border:none;}
/*202403版本*/
.toolbar .btnView{right:60px;width:36px;top:19px;border:none;}
/*右侧上 正片列表 list模式*/
.longListItem_wrap__9OsZi .btnView{right:unset;position:relative;width:36px;margin:0 7px 0 0;}
/*右侧上 正片列表 cube模式*/
.numberListItem_number_list_item__wszA4 a{height:18px;}
.numberListItem_number_list_item__wszA4 .btnView{width:32px;padding:0;border-radius:1px;right:unset;left:0;border:none;}
/*右侧中 PV&其他*/
.epitem_ep_item__CPdZy .btnView{width:36px;height:24px;position:relative;float:left;margin:3px 5px 0 0;text-align:center;color:#aaa;}
.epitem_ep_item__CPdZy .btnView:hover{color:#fff;background:#aaa;}
/*右侧下 系列*/
.seasonlist_ss_info__Yc7YV{width:130px;}
.seasonlist_ss_item__czhHy .btnView{height:24px;width:40px;position:relative;right:280px;}
/*右侧下 相关推荐*/
.RecommendItem_wrap__pJmXL{position:relative;}
.RecommendItem_wrap__pJmXL .btnView{height:22px;width:40px;position:absolute;right:unset;}
.RecommendItem_wrap__pJmXL .RecommendItem_cover__Rc3y2{background:none;}`;
var cheeseStyle = `
/*课堂分区首页*/
.block-list-item{position:relative;}
.rank dd{position:relative;}
.rank dd .btnView{right:unset;left:28px;line-height:12px;width:25px;}
.common-lazy-img{background:none;}
/*课程分类查找页*/
.big-card .btnView{right:unset;left:0;}`;
var cheesePlayStyle =`
/*课程视频观看页*/
.section-item .btnView{line-height:12px;width:25px;left:2px;bottom:7px;top:unset;border:none;}
.layout-r .btnRefresh{position:relative;top:0;right:0;cursor:pointer;line-height:24px;margin:0 0 0 10px;}
.layout-l .btnView{position:relative;border:none;}
/*右侧下 相关推荐*/
.season-recommend-card{position:relative;}
.season-recommend-card .btnView{right:unset;line-height:12px;width:25px;}`
var areaStyle = `
/*各分区首页or首页右侧的排行榜*/
.bili-rank-list-video__item--wrap{position:relative;}
.bili-rank-list-video__item--wrap .btnView{right:-8px;color:#aaa;border:1px solid #aaa;}
.bili-rank-list-cheese__item--wrap .btnView{color:#aaa;border:1px solid #aaa;}
.bili-rank-list-ogv__item--wrap .btnView{color:#aaa;border:1px solid #aaa;}`;
var varietyStyle = `
/*综艺分区首页*/
.side-item{position:relative;}
.side-item .btnView{width:25px;line-height:12px;}
.hot-item{position:relative;}
.column-itemDiv{-webkit-box-flex:1;flex:1;margin:0 16px 0 0;border-radius:8px;overflow:hidden;position:relative;}
.column-itemDiv .btnView{right:unset;left:0;}
.hover-item .btnView{right:unset;z-index:3;}
.web_rank_v2 .hover-item .btnView{right:0;}
/*综艺索引*/
.bangumi-item{position:relative;}
.bangumi-item .btnView{right:unset;left:0;}`;
var guochangStyle = `
/*国创*/
.progress-bar-content .btnView{top:4px;right:4px;border-radius:7px;}
.timeline-weekday-hover-item .btnView{z-index:10;right:unset;}
.ranking-ratio-item-container .btnView{z-index:10;right:unset;}
/*国创:二级分区*/
.spread-module .lazy-img{background:none;}
.spread-module .btnView{width:25px;line-height:12px;}
.sec-rank .rank-item .btnView{width:25px;line-height:12px;right:unset;}
.rank-list .rank-item.show-detail .ri-detail{padding:0 0 0 40px;}
.rank-list .rank-item.show-detail.highlight .ri-detail{padding:0;}
.rank-list .rank-item.show-detail a:hover .ri-detail{padding:0;}
/*国创:索引*/
.bangumi-item{position:relative;}
.bangumi-item .btnView{right:unset;}
.bangumi-item .common-lazy-img{background:none;}
.rank-item .lazy-img{background:none;}`;
var setMethod = null;
var timer = null;
var viewVideoList = null;
// 增加全局样式设置
GM_addStyle(staticStyle);
// 页面加载后分类处理
$(document).ready(function(){
var oldList = GM_getValue("BiliViewed",null);
if(oldList != null){
// 对原已看数据列表进行分组
groupGMVideoList(oldList);
}
// 获取页面高度:用于滚动条监听
pageHeight = $(window).height() * 0.66;
var domain = location.href;
var askIndex = domain.indexOf("?");
if(askIndex > -1){
domain = domain.substring(0,askIndex);
}
domain = domain.toLowerCase();
if(domain.indexOf("search.") > -1){
// 搜索页
GM_addStyle(searchStyle);
setMethod = setSearchPage;
}else if(domain.indexOf("space.") > -1){
// up主页空间
GM_addStyle(spaceStyle);
setMethod = setSpacePage;
}else if(domain.indexOf("t.") > -1){
// 登录后的动态
GM_addStyle(spaceStyle);
setMethod = setSpacePage;
// 滚动条下拉响应
setPageScrollMethod();
// up主头像点击响应
if($(".bili-dyn-up-list__item").length == 0){
// 头像未加载出来,等2秒后重新绑定
setTimeout(function(){
$(".bili-dyn-up-list__item").unbind("click").click(function(){
prePageScrollTop = 0;
setTimeout(setPageRefreshMethod,2000);
})
},2000);
}
}else if(domain.indexOf("www.") > -1){
// 主站
var href = location.href;
href = href.toLowerCase();
if(href.indexOf("/bangumi/play/") > -1){
// 节目-视频观看页
GM_addStyle(bangumiStyle);
setMethod = setBangumiPage;
}else if(href.indexOf("/cheese/play/") > -1){
// 课程-视频观看页
GM_addStyle(cheesePlayStyle);
setMethod = setCheesePlayPage;
}else if(href.indexOf("/cheese/") > -1){
// 课程-分区首页
GM_addStyle(cheeseStyle);
setMethod = setCheesePage;
}else if(href.indexOf("/guochuang") > -1 || href.indexOf("/anime") > -1){
// 番剧、国创-分区
GM_addStyle(guochangStyle);
setMethod = setGuochuangPage;
// 滚动条下拉监听
setPageScrollMethod();
}else if(href.indexOf("/v/musicplus") > -1){
// 新歌热榜-分区
GM_addStyle(indexStyle);
setMethod = setMusicplusPage;
}else if(href.indexOf("/play/watchlater") > -1){
// 稍后再看-视频观看页 (202303注:貌似已经自动跳转到/list/watchlater了)
return;
}else if(href.indexOf("/list/") > -1){
// 列表-视频观看页 (202303增加)
// 稍后再看-播放全部 按钮点击进入 /list/watchlater
// 个人收藏-播放全部 按钮点击进入 /list/mlxxxxx
GM_addStyle(listPlayStyle);
setMethod = setListPlayPage;
// 右侧 稍后再看 滚动条下拉监听(局部)
$("#playlist-video-action-list").scroll(function(){
var curScrollTop = $("#playlist-video-action-list").scrollTop();
if(Math.abs(curScrollTop - preScrollTop) > 300){
preScrollTop = curScrollTop;
setTimeout(function(){setMethod();},1000)
}
})
// 右侧下 推荐视频 滚动条下拉监听
setPageScrollMethod();
// 右侧下 推荐视频 展开按钮点击响应
$(".rec-footer").click(function(){
setTimeout(function(){setMethod();},1000)
});
}else if(href.indexOf("/watchlater") > -1){
// 稍后再看(列表页) :顶部收藏-稍后再看-查看全部
GM_addStyle(watchlaterStyle);
setMethod = setWatchlaterPage;
}else if(href.indexOf("/video/") > -1){
// 视频观看页
GM_addStyle(videoStyle);
setMethod = setVideoPage;
// 右侧下 推荐视频 滚动条下拉监听
setPageScrollMethod();
}else if(href.indexOf("/festival/") > -1){
// 活动视频观看页
GM_addStyle(festivalVideoStyle);
setMethod = setFestivalVideoPage;
// 右侧下 推荐视频 滚动条下拉监听
setPageScrollMethod();
}else if(href.indexOf("/popular/") > -1){
// 2023新增:综合热门、每周必看、入站必刷、排行榜、全站音乐榜
GM_addStyle(popularStyle);
setMethod = setPopularPage;
// tab点击监听
$(".nav-tabs__item").click(function(e){
setTimeout(function(){setMethod();},3000)
})
// 滚动条下拉监听(主要用于:综合热门)
setPageScrollMethod();
}else if(href.indexOf("/history") > -1 ){
// 历史页
GM_addStyle(historyStyle);
setMethod = setHistoryPage;
// 滚动条下拉监听
setPageScrollMethod();
}else if(href.indexOf("/v/channel/") > -1 ){
// 频道页
GM_addStyle(channelStyle);
setMethod = setChannelPage;
setTimeout(function(e){
// 左侧 发现频道 按钮点击响应
$(".discovery-panel__title").click(function(e){
setTimeout(setMethod,2000);
})
// 左侧 分类 点击响应
$(".content-item").click(function(e){
setTimeout(setMethod,4000);
})
// 左侧 我的订阅 Item点击响应
$(".subscribe-item").click(function(e){
setTimeout(setMethod,4000);
})
},2000);
}else if(href.indexOf("/variety/") > -1 || href.indexOf("/movie/") > -1 || href.indexOf("/tv/") > -1 || href.indexOf("/documentary/") > -1){
// 2023新增:分区:综艺、电影、电视剧、纪录片
GM_addStyle(varietyStyle);
setMethod = setVarietyPage;
// 滚动条下拉监听
setPageScrollMethod();
}else if(href.endsWith(".com/") || href.indexOf(".com/?") > -1 || href.indexOf(".com/index.html") > -1){
// 2023新增:首页
GM_addStyle(indexStyle);
setMethod = setIndexPage;
// 滚动条下拉监听
setPageScrollMethod();
setTimeout(function(){
// 新版:换一换按钮监听
$(".primary-btn.roll-btn").click(function(e){
setTimeout(setMethod,2000);
})
// 旧版:换一换按钮监听
$(".btn-change").click(function(e){
setTimeout(setMethod,2000);
})
},2000);
}else{
// 主站其他页面,如分区主页:鬼畜、舞蹈、娱乐、科技、美食、游戏、音乐、影视、知识、资讯、更多
//
GM_addStyle(areaStyle);
setMethod = setAreaPage;
// 滚动条下拉监听
setPageScrollMethod();
// 子分区按钮点击响应
$(".channel-nav-sub-item").click(function(e){
setTimeout(function(){setMethod();},1000)
})
}
}
// 检查执行结果(每3秒执行检查一次,最多执行5次)
if(setMethod != null){
timer = setInterval(checkBtnViewLoad,3000);
}
});
// 局部模块滚动条响应
var preScrollTop = 0;// 上一次局部模块滚动条到达的高度
// 设置页面滚动条响应
var pageHeight = 600; // 设置页面高度的三分二自动刷新一次
var curPageScrollTop = 0; // 当前页面滚动条的高度
var prePageScrollTop = 0; // 上一次页面滚动条到达的高度
var setPageScrollMethod = function(){
$(window).scroll(function(){
var curPageScrollTop = $(document).scrollTop();
if(Math.abs(curPageScrollTop - prePageScrollTop) > pageHeight){
prePageScrollTop = curPageScrollTop;
setTimeout(setMethod,1000);
}
})
}
// 设置刷新功能
var setPageRefreshMethod = function(){
$(".btnView").remove();
viewVideoJson = {};
setMethod();
setTimeout(function(e){
setMethod();
},3000);
}
// 202303新增:课程视频播放页
var setCheesePlayPage = function(){
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
$(".layout-r").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新↗</a>");
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
}
var indexJson = document.getElementById("app")._vnode.appContext.config.globalProperties.$pinia.state._rawValue.index;
if(indexJson == null){
return;
}
// 主视频
setVideoIsViewed($(".archive-tool-box"),".layout-l",0,"ep"+indexJson.currentEp.id,true);
// 右侧上 课程目录Item
var epoArr = indexJson.epList;
$(".section-item").each(function(idx){
setVideoIsViewed($(this),".season-info",0,"ep"+epoArr[idx].id,true,true);
})
// 右侧下 相关推荐Item
var rEpoArr = indexJson.viewInfo.recommend_seasons;
$(".season-recommend-card").each(function(idx){
setVideoIsViewed($(this),coverItemClass,0,"ss"+rEpoArr[idx].id);
})
// 点击视频自动刷新
$(".section-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,5000);
})
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:课堂 分区首页
var setCheesePage = function(){
// 普通Item
$(".block-list-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 排行榜Item
$(".rank dd").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 分类查找Item:大卡模式
$(".big-card").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 分类查找Item:小卡模式
$(".small-card").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 各筛选按钮点击
$(".radio-button-box .item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 大小卡点击响应
$(".mode-trigger span").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 分页按钮点击响应
$(".page-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 分页跳转到、搜索框回车响应
// 回车响应
$(document).unbind('keyup').keyup(function(event){
if(event.keyCode ==13){
setTimeout(setPageRefreshMethod,2000);
}
});
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:国创 分区
var setGuochuangPage = function(){
// 滚动推荐Item
$(".progress-bar-content").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 横向封面Item
$(".horizontal-ratio-item-inner").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 新番时间表Item
$(".timeline-weekday-hover-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 国创热播榜单Item
$(".ranking-ratio-item-container").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 新热推荐Item
$(".item-wrap").each(function(idx){
var epid = $(this).children("a")[0].__vue__.$parent.item.episode_id;
setVideoIsViewed($(this),coverItemClass,0,"ep"+epid,false,false);
});
// 二级分区:最新动态Item、普通Item
$(".spread-module").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 二级分区:热门Item
$(".rank-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// tab点击响应
$(".tabs-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
// 最近更新、周一、周二...周日 按钮点击响应
$(".week-day-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 下一页按钮点击响应
$(".next-page").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 上一页按钮点击响应
$(".prev-page").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 索引查找Item
$(".bangumi-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 索引查找 排序方式按钮点击响应
$(".sort-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 索引查找 筛选按钮点击响应
$(".filter-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 二级分区:热门标签 按钮点击响应
$(".tag-item").unbind("click").click(function(e){
setTimeout(setMethod,1000);
})
// 二级分区:换一换 按钮点击响应
$(".read-push").unbind("click").click(function(e){
setTimeout(setMethod,1000);
})
// 二级分区:投稿时间排序、视频热度排序、全部、原创、查看模式 点击响应
$(".tab-list li").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 二级分区:播放数 下拉菜单 点击响应
$(".dropdown-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 二级分区:分页按钮点击响应
$(".page-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 索引查找、二级分区:分页跳转到 回车响应
$(document).unbind('keyup').keyup(function(event){
if(event.keyCode ==13){
setTimeout(setPageRefreshMethod,1000);
}
});
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:新歌热榜 分区
var setMusicplusPage = function(){
// 头部1+6个Item
$(".video-card-reco").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 热门推荐Item
$(".card-pic").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// tabs 按钮点击响应
$(".tabs a").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 更多 按钮点击响应
$(".more").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 筛选 各按钮点击响应
$(".type-group li").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 搜索结果页 上面的 音乐首页 点击响应
$(".main-menu a").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 分页按钮点击响应
$(".pager a").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 搜索框回车响应
$(document).unbind('keyup').keyup(function(event){
if(event.keyCode ==13){
setTimeout(setPageRefreshMethod,1000);
}
});
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:番剧视频播放页
var setBangumiPage = function(){
// 主视频
var linkArr = $("link");
var linkRel = "";
var linkHref = "";
for(var i = 0 ; i < linkArr.length ;i++){
linkRel = $(linkArr[i]).attr("rel");
if(linkRel != "canonical"){
continue;
}
linkHref = $(linkArr[i]).attr("href");
if($(".toolbar").length > 0){
// 202403版本
setVideoIsViewed($(".player-left-components"),".toolbar",2,linkHref,true);
}else{
setVideoIsViewed($(".player-left-components"),".toolbar_toolbar__NJCNy",2,linkHref,true);
}
break;
}
// 刷新按钮
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
if($(".toolbar").length > 0){
// 202403版本
$(".toolbar").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新→</a>");
}else{
$(".toolbar_toolbar__NJCNy").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新→</a>");
}
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
}
if($(".toolbar").length > 0){
// 202403版本
// 下次更新。。
}else{
// 右侧上 正片(list模式)Item
$(".longListItem_wrap__9OsZi").each(function(){
var pArr = Object.getOwnPropertyNames(this);
if(pArr.length == 0){
return;
}
var epId = eval("this."+pArr[0]+".return.key");
setVideoIsViewed($(this),".longListItem_title__Xziqq",0,"ep"+epId,true,true);
// 点击响应
$(this).children("a:eq(1)").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
})
// 右侧上 正片(cube模式)Item
$(".numberListItem_number_list_item__wszA4").each(function(){
setVideoIsViewed($(this),"a",0,null,true,true);
// 点击响应
$(this).children("a:eq(1)").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
})
// 右侧上 正片查看模式切换点击响应
$(".modeChangeBtn_wrap__NOGS3").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,1000);
})
// 右侧中 系列Item
$(".seasonlist_ss_item__czhHy").each(function(){
setVideoIsViewed($(this),coverItemClass);
})
// 展开 按钮点击响应
$(".seasonlist_expand_more__VcTha").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 右侧中 PV&其他Item
$(".epitem_ep_item__CPdZy").each(function(){
setVideoIsViewed($(this),"a",0,null,true,true);
// 点击响应
$(this).children("a:eq(1)").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
})
// 右侧下 相关推荐Item
$(".RecommendItem_wrap__pJmXL").each(function(){
setVideoIsViewed($(this),coverItemClass);
// 点击响应
$(this).children("a:first").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
// 视频播放结束后没有出现推荐视频
})
}
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:频道页
var setChannelPage = function(){
// 普通Item
$(".video-card__content").each(function(){
setVideoIsViewed($(this),coverItemClass,0,null,false,false,false,true); // 注意排行1、2、3数字的图片
});
// 右侧“进入频道”按钮点击响应
$(".go-channel-btn").unbind("click").click(function(e){
setTimeout(setMethod,2000);
})
// 滚动条下拉监听(右侧局部)
$("#container").unbind("scroll").scroll(function(){
var curScrollTop = $("#container").scrollTop();
if(Math.abs(curScrollTop - preScrollTop) > pageHeight){
preScrollTop = curScrollTop;
setTimeout(setMethod,2000);
}
})
// 精选、综合 按钮点击响应
$(".van-tabs-tab").unbind("click").click(function(e){
setTimeout(setMethod,2000);
})
// 年份 按钮点击响应
$(".year-selector__item").unbind("click").click(function(e){
setTimeout(setMethod,2000);
})
// 近期热门、播放最多、最新投稿 按钮点击响应
$(".play-selector__item").unbind("click").click(function(e){
setTimeout(setMethod,2000);
})
// 相关tag 点击响应
$(".relative-tags div a").unbind("click").click(function(e){
setTimeout(setMethod,2000);
})
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:分区:综艺、电影、电视剧、纪录片
var setVarietyPage = function(){
// 头部滚动
$(".side-item").each(function(){
setVideoIsViewed($(this),".title",0,null,false,false);
});
// 综艺Item:封面是横的
$(".hot-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 综艺Item:封面是竖的
$(".hover-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 综艺Item:封面是方的(打一层包装)
var itemDivArr = $(".column-itemDiv");
if(itemDivArr.length == 0){
var itemArr = $(".column-item");
for(var i = 0 ; i < itemArr.length ;i++){
var divObj = $("<div class='column-itemDiv'></div>");
divObj.append(itemArr[i]);
$(".module-column").append(divObj);
}
}
// 综艺Item:封面是方的(.column-item → .column-itemDiv)
$(".column-itemDiv").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 索引查找Item
$(".bangumi-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 索引查找 排序方式按钮点击响应
$(".sort-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 索引查找 筛选按钮点击响应
$(".filter-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,2000);
})
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:分区:其他
var setAreaPage = function(){
// 普通Item
$(".bili-video-card__wrap").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 热门Item
$(".bili-rank-list-video__item--wrap").each(function(){
setVideoIsViewed($(this),".rank-video-card");
});
// 换一换按钮点击响应
$(".roll-btn").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
// 换一换旁边的查看更多进入:
// tag按钮点击响应
$(".tags-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
// 排序下拉菜单按钮点击响应
$(".channel-select-content-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:设置热门页的视频
var setPopularPage = function(){
// 综合热门Item
$(".video-card__content").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 排行榜Item
$(".img").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 全站音乐榜Item
$("._card_1kuml_6").each(function(){
setVideoIsViewed($(this),coverItemClass,0,null,false,false,true,true);
});
// 短剧榜Item(打一层包装)
var itemListArr = $(".drama-board-listClone");
if(itemListArr.length == 0){
$(".drama-board-list").each(function(idx){
var objOffset = $(this).offset();
var cloneObj = $(this).clone();
$(cloneObj).addClass("drama-board-listClone");
$(cloneObj).addClass("drama-board-listClone_"+idx);
$(cloneObj).removeClass("drama-board-list");
$(this).parent().append(cloneObj);
// 对克隆体里面的元素进行外层包装
var itemArr = $(".drama-board-listClone_"+idx+" .board-item-wrap");
for(var i = 0; i < itemArr.length;i++){
var divObj = $("<div class='board-item-wrapDiv'></div>");
divObj.append(itemArr[i]);
$(".drama-board-listClone_"+idx).append(divObj);
}
// 对齐被克隆的对象
$(cloneObj).offset(objOffset);
$(this).attr("style","opacity:0;");
})
}
$(".board-item-wrapDiv").each(function(){
setVideoIsViewed($(this),coverItemClass);
})
// 每周必看:切换第N期监听
$(".panel .select-item").click(function(e){
setTimeout(setPageRefreshMethod,5000);
})
// 排行榜:分类 点击监听
$(".rank-tab li").click(function(e){
$(".btnView").remove();
setTimeout(setMethod,3000);
})
// 全站音乐版:切换第N期 点击响应
// 修正原网页“看MV”按钮连接不正确的问题
$(".periodShow").unbind("click").click(function(e){
setTimeout(function(){
$(".periodList .periodItem").unbind("click").click(function(e){
$(".btnView").remove();
setTimeout(setMethod,3000);
})
},500)
})
// 短剧榜:切换第N期 点击响应
$(".dropdown-item").unbind("click").click(function(e){
$(".drama-board-listClone").remove();
$(".drama-board-list").removeAttr("style");
setTimeout(setMethod,2000);
})
// 短剧榜:热榜榜单、编辑精选 点击响应
$(".switch-tabs .tab").unbind("click").click(function(e){
var tabIndex = $(this).index();
var objOffset = $(".drama-board-list:eq("+tabIndex+")").offset();
$(".drama-board-listClone_"+tabIndex).offset(objOffset);
})
// 已看/未看按钮响应
setBtnView();
}
// 202303新增:设置首页推荐视频
var setIndexPage = function(){
// 202303选新版:普通Item
$(".__scale-wrap").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 202303选新版:番剧Item
$(".bili-bangumi-card").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 202303选新版:动画排行榜Item
$(".bili-rank-list-video__item--wrap").each(function(){
setVideoIsViewed($(this),".rank-video-card"); // 排行榜没有封面
});
// 202303选新版:番剧排行榜Item
$(".bili-rank-list-ogv__item--wrap").each(function(){
setVideoIsViewed($(this),".rank-ogv-card"); // 排行榜没有封面
});
// 202303选新版:课堂排行榜Item
$(".bili-rank-list-cheese__item--wrap").each(function(){
setVideoIsViewed($(this),".rank-cheese-card"); // 排行榜没有封面
});
// 202303选旧版:开头的推荐Item
$(".info-box").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 202303选旧版:普通Item
$(".card-pic").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 202303选旧版:排行榜Item
$(".rank-wrap").each(function(){
setVideoIsViewed($(this),"a",0,null,true,true);
});
// 已看/未看按钮响应
setBtnView();
}
// 设置视频观看页
var setVideoPage = function(){
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
// 2023选旧版:视频下方、笔记按钮的右边 添加刷新按钮
$(".rigth-btn").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新↗</a>");
// 2023选新版:在记笔记按钮右边的三点的右边 添加刷新按钮
$(".toolbar-right").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新↗</a>");
// 202305选新版:在记笔记按钮右边的三点的右边 添加刷新按钮
$(".video-toolbar-right").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新↗</a>");
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
}
var initState = unsafeWindow.__INITIAL_STATE__;
if(!initState){
return;
}
// 主视频
var bvid = initState.bvid;
var partList = $(".cur-list ul li");
if(partList.length == 0){
// 202410版本
partList = $(".multip .video-pod__item");
}
if(partList.length > 0){
bvid = bvid + "-"+initState.p;
}
// 如果是分P视频则显示对应分P状态
if($(".video-info-meta").length > 0){
// 202403版本
setVideoIsViewed($(".video-info-meta"),".pubdate-ip",0,bvid,true);
// 下箭头悬浮弹出框(如果有)
setVideoIsViewed($(".overflow-panel"),".pubdate-ip",0,bvid,true);
}else if($(".video-info-v1").length > 0){
// 202303选新版
setVideoIsViewed($(".video-info-v1"),".video-data",0,bvid,true);
}else if($(".video-info").length > 0){
// 202303选旧版
setVideoIsViewed($(".video-info"),".video-data",0,bvid,true);
}else{
// 202306选新版
setVideoIsViewed($(".video-info-container"),".video-info-detail",0,bvid,true);
}
// 202303选新版、旧版:右侧上 视频选集Item(分P列表)
partList.each(function(idx){
setVideoIsViewed($(this),"a",0,initState.bvid+"-"+(idx+1),true,true);
// 点击视频响应:自动刷新
$(this).unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,5000);
})
});
// 202410版本:右侧上 订阅合集Item
$(".pod-item").each(function(idx){
var targetObj = $(this).find(".cover:first");
if(targetObj.length > 0){
// 有视频封面
setVideoIsViewed(targetObj,coverItemClass,0,$(this).data("key"));
}else{
// 没视频封面
setVideoIsViewed($(this),".title",0,$(this).data("key"),true,true);
}
})
// 202410版本:右侧上 视频选集Item(早期的分P视频)
$(".multip .video-pod__item").each(function(idx){
// 没视频封面
setVideoIsViewed($(this),".title",0,initState.bvid+"-"+(idx+1),true,true);
})
// 202410版本:视频点击响应
$(".pod-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
// 202410版本:视频点击响应(分P)
$(".simple-base-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
// 202303选新版、旧版:右侧上 订阅合集Item
var sectionArr = initState.sections;
if(sectionArr && sectionArr.length > 0){
var epoArr = sectionArr[0].episodes;
for(var i = 1 ; i < sectionArr.length;i++){
epoArr = epoArr.concat(sectionArr[i].episodes);
}
$(".video-episode-card").each(function(idx){
var targetObj = $(this).find(".video-episode-card__cover:first");
if(targetObj.length > 0){
// 有视频封面
setVideoIsViewed(targetObj,coverItemClass,0,epoArr[idx].bvid);
}else{
// 没视频封面
setVideoIsViewed($(this),".video-episode-card__info-title",0,epoArr[idx].bvid,true,true);
}
})
// 视频点击响应
$(".video-episode-card").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
}
// 202303选新版、旧版:右侧下 推荐视频Item
var relatedArr = initState.related;
if(relatedArr && relatedArr.length > 0){
//注意此处的输出顺序:会有spec插入到.pic-box .pic列表顺序输出中,造成不是按related顺序逐个输出,.pic-box .pic前面要加限定
// 202303选新版
$(".video-page-card-small .pic-box .pic").each(function(idx){
setVideoIsViewed($(this),coverItemClass,0,relatedArr[idx].bvid);
});
// 202303选新版 推荐视频点击响应(注意要包含右边的文字点击)
$(".video-page-card-small").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,5000);
})
// 202303选旧版
$(".video-page-card .pic-box .pic").each(function(idx){
setVideoIsViewed($(this),coverItemClass,0,relatedArr[idx].bvid);
});
// 202303选旧版 推荐视频点击响应(注意要包含右边的文字点击)
$(".video-page-card").unbind("click").click(function(){
setTimeout(setPageRefreshMethod,3000);
})
// 202303选新版:视频窗口播放视频结束后出现的推荐视频Item
$(".bpx-player-video-wrap video").unbind("ended").bind("ended",function(e){
setTimeout(function(){
var itemDivArr = $(".bpx-player-ending-related-itemDiv");
if(itemDivArr.length == 0){
var itemArr = $(".bpx-player-ending-related-item");
for(var i = 0 ; i < itemArr.length ;i++){
var divObj = $("<div class='bpx-player-ending-related-itemDiv'></div>");
divObj.append(itemArr[i]);
$(".bpx-player-ending-related").append(divObj);
}
}
$(".bpx-player-ending-related-itemDiv").each(function(idx){
setVideoIsViewed($(this),".bpx-player-ending-related-item",0,relatedArr[idx].bvid,true,true); // 封面是div
// 点击视频自动刷新
$(".bpx-player-ending-related-item").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
});
},2000);
})
}
// “特别”推荐视频
var specData = initState.spec;
if(specData && specData.card){
// 202303选新版:
$(".video-page-special-card-small .pic-box .pic").each(function(){
setVideoIsViewed($(this),coverItemClass,2,specData.card.re_value);
});
// 202303选旧版:
$(".video-page-special-card .pic-box .pic").each(function(){
setVideoIsViewed($(this),coverItemClass,2,specData.card.re_value);
});
}
// 另一种“特别”推荐视频
if(specData && specData.archive){
// 202303选新版:
$(".video-page-operator-card-small .pic-box .pic").each(function(){
setVideoIsViewed($(this),coverItemClass,0,specData.archive.bvid);
});
// 202303选旧版:
$(".video-page-operator-card .pic-box .pic").each(function(){
setVideoIsViewed($(this),coverItemClass,0,specData.archive.bvid);
});
}
//
// 202303选新版、旧版:展开 按钮点击响应
$(".rec-footer").unbind("click").click(function(){
setTimeout(setMethod,2000);
})
// 202303选新版:右侧上 视频选集/分P视频 list、cube模式切换 点击响应
$(".range-box").unbind("click").click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 202410选新版:右侧上 视频选集/分P视频 list、cube模式切换 点击响应
$(".view-mode").unbind("click").click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 已看/未看按钮响应
setBtnView();
}
// 设置活动视频观看页
var setFestivalVideoPage = function(){
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
// 202303:在记笔记按钮右边的三点的右边 添加刷新按钮
$(".video-toolbar-content_right").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新↗</a>");
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
}
var initState = unsafeWindow.__INITIAL_STATE__;
if(!initState){
return;
}
// 主视频
var videoInfo = initState.videoInfo;
if(videoInfo){
var bvid = initState.videoInfo.bvid;
setVideoIsViewed($(".video-toolbar-content"),".video-toolbar-content_left",0,bvid,true);
}
// 202303:右侧上 合集Item
var sectionArr = initState.videoSections;
if(sectionArr && sectionArr.length > 0){
var epoArr = sectionArr[0].episodes;
for(var i = 1 ; i < sectionArr.length;i++){
epoArr = epoArr.concat(sectionArr[i].episodes);
}
$(".video-episode-card").each(function(idx){
var targetObj = $(this).find(".video-episode-card__cover:first");
if(targetObj.length > 0){
// 有视频封面
setVideoIsViewed(targetObj,".activity-image-card__image",0,epoArr[idx].bvid);// 封面图片用div
}else{
// 没视频封面
setVideoIsViewed($(this),".video-episode-card__info-title",0,epoArr[idx].bvid,true,true);
}
})
// 点击视频自动刷新
$(".video-episode-card").unbind("click").click(function(e){
setTimeout(setPageRefreshMethod,3000);
})
}
// 202303:右侧下 推荐视频Item
var recommendArr = initState.recommendList.relate_video;
if(recommendArr){
$(".recommend-video-card").each(function(idx){
setVideoIsViewed($(this),".activity-image-card__image",0,recommendArr[idx].bvid); // 封面图片用div
});
// 视频播放结束后没有出现推荐视频
}
// 已看/未看按钮响应
setBtnView();
}
// 设置历史页
var setHistoryPage = function(){
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
$(".b-head-search").before("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新</a>");
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
}
// 普通Item
$(".cover-contain").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 搜索框:回车响应
$(document).unbind('keyup').keyup(function(event){
if(event.keyCode ==13){
setTimeout(setPageRefreshMethod,2000);
}
});
// 已看/未看按钮响应
setBtnView();
}
// 稍后再看-视频观看页
var setListPlayPage = function(){
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
$(".video-toolbar-right").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新↗</a>");
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
}
var initState = unsafeWindow.__INITIAL_STATE__;
if(initState == null || initState.resourceList == null){
return;
}
// 主视频
if(initState.videoData.pages.length > 1){
// 分P视频
setVideoIsViewed($(".video-info-container"),".video-info-detail-list",0,initState.bvid+"-"+initState.p,true);
}else{
// 非分P视频
setVideoIsViewed($(".video-info-container"),".video-info-detail-list",0,initState.bvid,true);
}
// 右侧 稍后再看Item
var epoArr = initState.resourceList;
$(".actionlist-item-inner .main").each(function(idx){
setVideoIsViewed($(this),coverItemClass,0,epoArr[idx].bv_id);
var multipObj = $(this).parent().children(".multip-list:first");
if(multipObj.length > 0){
// 有分P视频列表
$(multipObj[0]).children(".multip-list-item").each(function(idx2){
setVideoIsViewed($(this),".left-part",0,epoArr[idx].bv_id+"-"+epoArr[idx].pages[idx2].page,true);
// 视频点击响应
$(this).unbind("click").click(function(){
setTimeout(setPageRefreshMethod,2000);
})
})
}
// 视频点击响应
$(this).unbind("click").click(function(){
setTimeout(setPageRefreshMethod,2000);
})
})
// 右侧下 推荐视频Item
$(".pic-box").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 右侧 稍后再看 删除按钮点击响应
$(".del-btn").unbind("click").click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 已看/未看按钮响应
setBtnView();
}
// 设置稍后观看页(列表页)
var setWatchlaterPage = function(){
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
$(".r-con").before("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新</a>");
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
}
// 列表Item
$(".av-item").each(function(){
setVideoIsViewed($(this),coverItemClass,1);
});
// 已看/未看按钮响应
setBtnView();
}
// 设置空间页
var setSpacePage = function(){
var refreshObj = $(".btnSpaceRefresh");
if(refreshObj.size() == 0){
$("#navigator .wrapper").prepend("<a class='btnSpaceRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新</a>");
$("#navigator-fixed .wrapper").prepend("<a class='btnSpaceRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新</a>");
$(".dyn-topic-panel").append("<a class='btnSpaceRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>←刷新</a>");
// 202303:新版动态页
if($(".right").is(":hidden")){
// 只有两列的情况,刷新按钮显示在左边
$(".left .bili-dyn-live-users__body").append("<a class='btnSpaceRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新→</a>");
}else{
// 三列情况,刷新按钮显示在右边
$(".right .sticky").append("<a class='btnSpaceRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>←刷新</a>");
}
$(".btnSpaceRefresh").click(function(){
setPageRefreshMethod();
})
}
// 置顶视频Item:up空间主页:https://space.bilibili.com/xxxx
$(".i-pin-part .i-pin-has-content").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 普通Item(cube模式):up空间主页-TA的视频、合集·XXXX;投稿;合集和列表-点击更多;收藏;;个人登录后的收藏
$(".small-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 普通Item(list模式):.small-item切换为list模式
$(".list-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 动态Item:这个在哪儿的??
$(".video-container").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 2022 动态Item:
// 用户登录后的动态:https://t.bilibili.com/?spm_id_from=
// up空间的动态:https://space.bilibili.com/xxxx/dynamic
$(".bili-dyn-content__orig__major").each(function(){
var coverObj = $(this).find(".bili-awesome-img:first");// 202303选新版、页面用的<div/>
if(coverObj.length > 0){
setVideoIsViewed($(this),".bili-awesome-img");
}else{
setVideoIsViewed($(this),coverItemClass);// 202303选旧版、t.bili
}
});
// 合集和列表Item:https://space.bilibili.com/xxxxx/channel/series
$(".video-card").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 已看/未看按钮响应
setBtnView();
// 点击up主头像响应
$(".bili-dyn-up-list__item").unbind("click").click(function(){
prePageScrollTop = 0;
setTimeout(setPageRefreshMethod,2000);
})
// 分页按钮响应
$(".be-pager li").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 搜索视频按钮响应
$(".search-btn").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 回车响应
$(document).unbind('keyup').keyup(function(event){
if(event.keyCode ==13){
setTimeout(setPageRefreshMethod,2000);
}
});
// 导航栏响应
$(".n-tab-links a").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 侧栏按钮响应
$(".contribution-item").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 排序按钮响应
$(".be-tab-item").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// Tag点击响应
$("#submit-video-type-filter a").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 收藏列表响应
$(".fav-item a").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// up空间主页:点击“更多”按钮 响应
$(".more").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 合集和列表:点击“更多”按钮 响应
$(".more-btn").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 合集和列表:查看模式 点击响应
$(".list-style span").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
}
// 设置已看/未看按钮响应
var coverItemClass = "img";
var setBtnView = function(){
$(".btnView").unbind("click").click(function(e){
var avId = $(this).data("av");
var view = $(this).data("view");
// 先读再存(跨页操作)
// not:类.block-list-item-info-player--img为课堂分区封面上面的播放小图标
// not:类.cover为热门-全站排行榜的唱片封面
var coverObjs = $(this).parent().find(coverItemClass+":not(.block-list-item-info-player--img):not(.cover):first");
var setIsViewed = false;
if(view == 0){
// 未看 -> 已看
setIsViewed = true;
$(this).text("已看");
$(this).removeClass("btnNotView");
$(this).addClass("btnIsView");
$(this).data("view","1");
coverObjs.css("opacity",opacityIsViewCover);
}else{
// 已看 -> 未看
$(this).text("未看");
$(this).removeClass("btnIsView");
$(this).addClass("btnNotView");
$(this).data("view","0");
coverObjs.css("opacity","1");
}
// 删除所有按钮
$(".btnView").remove();
// 即时存储
saveGMVideoList(avId,setIsViewed);
// 重新读取
setMethod();
return false;
});
}
// (多域名共用)检测按钮是否已加载,8次内有效
var isCheck = true;
var btnCount = 0;
var checkCount = 0;
var checkBtnViewLoad = function(){
if(!isCheck){
clearInterval(timer);
timer = null;
return;
}
btnCount = $(".btnView").size();
if(btnCount > 0 || checkCount > 5){
clearInterval(timer);
timer = null;
}else{
setMethod();
}
checkCount++;
}
// 设置搜索页面
var isView = 0;
var videoArr = null;
var isTextAreaHidden = true;
var setSearchPage = function(){
var refreshObj = $(".btnRefresh");
if(refreshObj.size() == 0){
// 202303选旧版
$(".filter-wrap").append("<a class='btnList' title='显示/隐藏已看ID的数据列表,建议定期复制到其他地方进行保存,避免因事故造成丢失'>显示/隐藏</a>");
$(".filter-wrap").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新</a>");
$(".filter-wrap").append("<a class='btnListSave' title='如果文本框内容有修改,请点击这个按钮进行保存。'>保存列表</a>");
$(".filter-wrap").append("<textarea class='viewList'></textarea>");
// 202303选新版
$(".vui_tabs--navbar").append("<a class='btnList' title='显示/隐藏已看ID的数据列表,建议定期复制到其他地方进行保存,避免因事故造成丢失'>显示/隐藏</a>");
$(".vui_tabs--navbar").append("<a class='btnRefresh' title='如果列表没出现已看/未看标识,请手动点击这个按钮进行刷新'>刷新</a>");
$(".vui_tabs--navbar").append("<a class='btnListSave' title='如果文本框内容有修改,请点击这个按钮进行保存。'>保存列表</a>");
$(".vui_tabs--navbar").append("<textarea class='viewList'></textarea>");
// 显示列表按钮 点击响应
$(".btnList").click(function(){
if(isTextAreaHidden){
var keyList = GM_listValues();
var key = "";
var str = "";
for(var i = 0 ; i < keyList.length;i++){
key = keyList[i];
if(key.indexOf("BiliViewed_") == 0){
str += GM_getValue(key,"")+",";
}
}
$(".viewList").val(str);
}
isTextAreaHidden = !isTextAreaHidden;
$(".viewList").toggle();
$(".btnListSave").toggle();
})
// 刷新按钮 点击响应
$(".btnRefresh").click(function(){
setPageRefreshMethod();
})
// 保存列表 点击响应
$(".btnListSave").click(function(){
viewVideoList = $(".viewList").val();
saveTextAreaVideoList(viewVideoList);
isTextAreaHidden = !isTextAreaHidden;
$(".viewList").toggle();
$(".btnListSave").toggle();
})
}
// 202303选新版:番剧搜索结果
// 番剧封面视频
$(".media-card").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 番剧集数列表
var itemSpanArr = $(".media-footerClone .p_relativeSpan");
if(itemSpanArr.length == 0){
// 克隆一个.media-footer
$(".media-card-content-footer").each(function(idx){
var mFooter = $(this).find(".media-footer:first");
if(mFooter.length == 0){
return;
}
var objOffset = mFooter.offset();
var cloneObj = $(mFooter).clone();
$(cloneObj).addClass("media-footerClone");
$(cloneObj).addClass("media-footerClone_"+idx);
$(cloneObj).removeClass("media-footer");
$(this).append(cloneObj);
// 对克隆体里面的元素进行外层包装
var itemArr = $(".media-footerClone_"+idx+" .p_relative");
for(var i = 0 ; i < itemArr.length ;i++){
var spanObj = $("<span class='p_relativeSpan'></span>");
spanObj.append(itemArr[i]);
$(".media-footerClone_"+idx).append(spanObj);
}
// 克隆层对齐被克隆层
$(".media-footerClone_"+idx).offset(objOffset);
})
$(".media-footer").attr("style","opacity:0");//原来那层变透明
// 窗口大小改变时进行监听:自动删除克隆层
$(window).unbind("resize").resize(function(){
$(".media-footer").removeAttr("style");
$(".media-footerClone").remove();
setTimeout(setMethod,2000);
})
}
$(".p_relativeSpan").each(function(){
setVideoIsViewed($(this),".vui_button");
});
// 综艺集数列表
$(".seleced-ep").unbind("mouseenter").bind("mouseenter",function(){
setTimeout(setMethod,500);
})
var itemArr = $(".media-footer-select-content-item");
itemSpanArr = $(".selConSpan");
var newLength = itemArr.length - itemSpanArr.length;
if(itemSpanArr.length == 0 || newLength > 0){
for(var i = itemSpanArr.length ; i < itemArr.length ;i++){
var spanObj = $("<div class='selConSpan'></div>");
spanObj.append(itemArr[i]);
$(".media-footer-select-content").append(spanObj);
}
}
$(".selConSpan").each(function(){
setVideoIsViewed($(this),".media-footer-select-content-item",0,null,true,true);
});
// 查看更多 按钮调回到列表最后面
$(".media-footer-select-content-more").each(function(){
$(this).appendTo($(this).parent());
})
// 202303选新版、旧版:up主的视频Item
$(".bili-video-card__wrap").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 202303选新版、旧版:搜索结果Item
$(".video-item").each(function(){
setVideoIsViewed($(this),coverItemClass);
});
// 已看/未看按钮响应
setBtnView();
// 分页按钮响应
$(".page-item").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 搜索按钮响应
$(".search-button").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 排序按钮响应
$(".filter-item a").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 分类菜单响应
$(".v-switcher-header-item a").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 202303选新版:分类菜单点击响应
$(".vui_tabs--nav-item").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
// 回车响应
$(document).unbind('keyup').keyup(function(event){
if(event.keyCode ==13){
setTimeout(setPageRefreshMethod,2000);
}
});
// 2023选新版:分页、导航、分类菜单按钮等响应
$(".vui_button").unbind('click').click(function(){
setTimeout(setPageRefreshMethod,2000);
})
}
// 获取视频链接上的bv号(不含开头bv)
// 设置每个视频是否已看/未看
// targetAppend:获取视频链接的目标对象(子元素有<a/>),追加已看/未看按钮的那个对象
// coverClass:视频封面的对象(用来设置透明度)
// playType:播放类型(链接处理不同) 0普通视频/节目视频(版权视频)、1稍后观看视频、2、节目视频(视频链接作为videoid传入)
// videoid:直接传入视频号(如果传入这个,则跳过对targetAppend的视频链接提取处理)
// noAppendTarget:传入true时,则不追加按钮到targetAppend对象下,而是追加到coverClass对象下面,也不会设置封面透明度(主要用于对视频观看页的特殊处理)
// isBefore:传入true时,按钮插入到指定对象(同层)的前面,否则追加指定对象(内部)的最后
// findALast:传入true时,查找targetAppend的最后一个a标签,否则查找第一个a标签
// findCoverClassLast:传入true时,查找coverClass对应的的最后一个对象元素,否则查找对应的第一个对象元素
// 返回:去掉开头bv两个字符的视频号,如果中途处理失败,则返回null
var bvid = null;
var setVideoIsViewed = function(targetAppend,coverClass,playType,videoid,noAppendTarget,isBefore,findALast,findCoverClassLast){
// 获取封面
var coverObj = null;
if(findCoverClassLast){
coverObj = targetAppend.find(coverClass+":last");
}else{
coverObj = targetAppend.find(coverClass+":first");
}
if(coverObj.length == 0){
return null;
}
// 判断是否已设置按钮和封面
var btnView = null;
if(noAppendTarget){
if(isBefore){
btnView = coverObj.parent().children(".btnView:first");
}else{
btnView = coverObj.children(".btnView:first");
}
}else{
btnView = targetAppend.children(".btnView:first");
}
if(btnView.length > 0){
return null;
}
if(videoid != null && playType != 2){
bvid = videoid;
}else{
// 获取视频链接和封面
if(playType == 2){
// videoid作为链接处理
bvid = videoid;
// 然后作为普通视频处理
playType = 0;
}else{
var aObj = null;
if(findALast){
aObj = targetAppend.find("a:last");
}else{
aObj = targetAppend.find("a:first");
}
if(aObj.length == 0){
return null;
}
bvid = aObj.attr("href");
}
if(bvid == null){
return null;
}
// 提取视频链接上面的bv号
if(playType == 1){
// 稍后观看视频
bvid = bvid.replace("//www.bilibili.com/medialist/play/watchlater/","");
}else{
// 短地址
bvid = bvid.replace("//b23.tv/","");
// 课程手机视频(首页的课堂Item用的)
bvid = bvid.replace("//m.bilibili.com/cheese/play/","");
// 普通视频
bvid = bvid.replace("//www.bilibili.com/video/","").replace("/video/","");
// 节目视频
bvid = bvid.replace("//www.bilibili.com/bangumi/play/","").replace("/bangumi/play/","");
// 课程视频
bvid = bvid.replace("//www.bilibili.com/cheese/play/","").replace("/cheese/play/","");
bvid = bvid.replace("//www.bilibili.com/cheese/play/","").replace("/cheese/play/","");
}
bvid = bvid.replace("https:","");
var slashIndex = bvid.indexOf("/");
if(slashIndex > -1){
bvid = bvid.substring(0,slashIndex);
}
if(bvid.length == 0){
return null;
}
slashIndex = bvid.indexOf("?");
if(slashIndex > -1){
bvid = bvid.substring(0,slashIndex);
}
bvid = bvid.replace("/","");
}
if(bvid.startsWith("av")){
// av号转bv号
bvid = bvid.substr(2);
bvid = avToBv.encode(bvid);
bvid = bvid.substr(2);
}else if(bvid.startsWith("BV") || bvid.startsWith("bv")){
bvid = bvid.replace("BV","").replace("bv","");
}else if(bvid.startsWith("ep") || bvid.startsWith("ss")){
// 节目视频原样保留
}else{
return null;
}
if(noAppendTarget){
targetAppend = coverObj;
}
// 添加已看/未看按钮、设置封面透明度
if(getBvIsViewed(bvid)){
// 已看
if(isBefore){
targetAppend.before("<a class='btnView btnIsView' data-view='1' data-av='"+bvid+"'>已看</a>");
}else{
targetAppend.append("<a class='btnView btnIsView' data-view='1' data-av='"+bvid+"'>已看</a>");
}
if(!noAppendTarget){
coverObj.css("opacity",opacityIsViewCover);
}
}else{
// 未看
if(isBefore){
targetAppend.before("<a class='btnView btnNotView' data-view='0' data-av='"+bvid+"'>未看</a>");
}else{
targetAppend.append("<a class='btnView btnNotView' data-view='0' data-av='"+bvid+"'>未看</a>");
}
if(!noAppendTarget){
coverObj.css("opacity","1");
}
}
return bvid;
}
// 判断视频是否已看
var viewVideoJson = {};
var viewGroupArr = null;
var getBvIsViewed = function(bvid){
bvid = bvid + "";
if(bvid.length < 5){ // 暂时发现最短是ss100
return false;
}
var groupId = "";
if(bvid.startsWith("ep")){
// 节目视频(ep数字):ep+最后一个数字作为分组名称
groupId = "ep"+bvid.substr(bvid.length-1,1);
}else if(bvid.startsWith("ss")){
// 节目合集(ss数字):ss+最后一个数字作为分组名称
groupId = "ss"+bvid.substr(bvid.length-1,1);
}else if(bvid.length == 10){
// 普通视频bv号:取第二个字符作为分组
groupId = bvid.substr(1,1);
}else if(bvid.length > 10 && bvid.indexOf("-") == 10){
// 分P存储bv-N,N为第N P:取第二个字符作为分组
groupId = bvid.substr(1,1);
}else{
return false;
}
viewGroupArr = viewVideoJson[groupId];
if(!viewGroupArr){
viewGroupArr = GM_getValue("BiliViewed_"+groupId,null);
if(viewGroupArr == null){
// 该分组未建立
return false;
}
viewVideoJson[groupId] = viewGroupArr;
}
for(var i = 0 ; i < viewGroupArr.length;i++){
if(bvid == viewGroupArr[i]){
return true;
}
}
return false;
}
// 更新和保存GM本地存储的列表
var saveGMVideoList = function(bvid,isViewed){
bvid = bvid + "";
if(bvid.length < 5){
return false;
}
var groupId = "";
if(bvid.startsWith("ep")){
// 节目视频(ep数字):ep+最后一个数字作为分组名称
groupId = "ep"+bvid.substr(bvid.length-1,1);
}else if(bvid.startsWith("ss")){
// 节目合集(ss数字):ss+最后一个数字作为分组名称
groupId = "ss"+bvid.substr(bvid.length-1,1);
}else if(bvid.length == 10){
// 普通视频bv号:取第二个字符作为分组
groupId = bvid.substr(1,1);
}else if(bvid.length > 10 && bvid.indexOf("-") == 10){
// 分P存储bv-N,N为第N P:取第二个字符作为分组
groupId = bvid.substr(1,1);
}else{
return false;
}
viewGroupArr = viewVideoJson[groupId];
if(!viewGroupArr){
viewGroupArr = GM_getValue("BiliViewed_"+groupId,null);
if(viewGroupArr == null){
// 该分组未建立
if(!isViewed){
return;
}
viewVideoJson[groupId] = [];
}
}
if(isViewed){
// 防止没刷新重复插入
for(var i = 0 ; i < viewVideoJson[groupId].length && i < 10;i++){
if(viewVideoJson[groupId][i] == bvid){
return;
}
}
viewVideoJson[groupId].unshift(bvid); // 添加新的bv号到数组中
}else{
for(var i = 0 ; i < viewVideoJson[groupId].length;i++){
if(viewVideoJson[groupId][i] == bvid){
viewVideoJson[groupId].splice(i,1); // 删除数组上指定位置的数据
}
}
}
// 存储到GM
GM_setValue("BiliViewed_"+groupId,viewVideoJson[groupId]);
}
// 对原已看视频数据列表进行分组(按第二个字母)
var groupGMVideoList = function(viewVideoList){
if(viewVideoList.length == 0){
GM_deleteValue("BiliViewed");
return;
}
var videoArr = viewVideoList.split("\n");
var gid = "";
var groupJson = {};
for(var i = 0 ; i < videoArr.length;i++){
if(videoArr[i].length < 6){
continue;
}
if(videoArr[i].startsWith("ep")){
// 节目视频(ep数字):ep+最后一个数字作为分组名称
gid = "ep"+videoArr[i].substr(videoArr[i].length-1,1);
}else if(videoArr[i].startsWith("ss")){
// 节目合集(ss数字):ss+最后一个数字作为分组名称
gid = "ss"+videoArr[i].substr(videoArr[i].length-1,1);
}else if(videoArr[i].length == 10){
// 普通视频bv号:取第二个字符作为分组
gid = videoArr[i].substr(1,1);
}else if(videoArr[i].length > 10 && videoArr[i].indexOf("-") == 10){
// 分P存储bv-N,N为第N P:取第二个字符作为分组
gid = videoArr[i].substr(1,1);
}else{
continue;
}
if(!groupJson[gid]){
groupJson[gid] = [];
}
groupJson[gid].unshift(videoArr[i]);
}
// 存储各分表
for(var key in groupJson){
GM_setValue("BiliViewed_"+key,groupJson[key]);
}
// 删除原列表
GM_deleteValue("BiliViewed");
}
// 对文本框的视频数据列表进行分组(按第二个字母)
var saveTextAreaVideoList = function(viewVideoList){
viewVideoList = viewVideoList.replaceAll("\n",",");
var videoArr = viewVideoList.split(",");
var gid = "";
var groupJson = {};
for(var i = 0 ; i < videoArr.length;i++){
if(videoArr[i].length < 6){
continue;
}
if(videoArr[i].startsWith("ep")){
// 节目视频(ep数字):ep+最后一个数字作为分组名称
gid = "ep"+videoArr[i].substr(videoArr[i].length-1,1);
}else if(videoArr[i].startsWith("ss")){
// 节目合集(ss数字):ss+最后一个数字作为分组名称
gid = "ss"+videoArr[i].substr(videoArr[i].length-1,1);
}else if(videoArr[i].length == 10){
// 普通视频bv号:取第二个字符作为分组
gid = videoArr[i].substr(1,1);
}else if(videoArr[i].length > 10 && videoArr[i].indexOf("-") == 10){
// 分P存储bv-N,N为第N P:取第二个字符作为分组
gid = videoArr[i].substr(1,1);
}else{
continue;
}
if(!groupJson[gid]){
groupJson[gid] = [];
}
groupJson[gid].unshift(videoArr[i]);
}
// 清空原来GM存储的所有数据
var keyList = GM_listValues();
var key = "";
for(var i = 0 ; i < keyList.length;i++){
key = keyList[i];
if(key.indexOf("BiliViewed_") == 0){
GM_deleteValue(key);
}
}
// 存储各分表
for(var key in groupJson){
GM_setValue("BiliViewed_"+key,groupJson[key]);
}
}
// av转bv,参考来源:https://github.com/Coxxs/bvid/blob/master/bvid.js
var avToBv = (function () {
var table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
var tr = {}
for (var i = 0; i < 58; i++) {
tr[table[i]] = i
}
var s = [11, 10, 3, 8, 4, 6]
var r = ['B', 'V', '1', '', '', '4', '', '1', '', '7', '', '']
var xor = 177451812
var add = 8728348608
function encode(x) {
if (x <= 0 || x >= 1e9) {
return null
}
x = (x ^ xor) + add
var result = r.slice()
for (var i = 0; i < 6; i++) {
result[s[i]] = table[Math.floor(x / 58 ** i) % 58]
}
return result.join('')
}
return { encode }
})()