Bilibili BigCover

查看B站封面大图

  1. // ==UserScript==
  2. // @name Bilibili BigCover
  3. // @namespace https://gf.qytechs.cn/zh-CN/users/196399-xyabc120
  4. // @icon http://static.hdslb.com/images/favicon.ico
  5. // @version 1.2.0
  6. // @description 查看B站封面大图
  7. // @author Mr.ZHAO
  8. // @include *://www.bilibili.com/video/*
  9. // @include *://bangumi.bilibili.com/anime/*
  10. // @include *://www.bilibili.com/bangumi/*
  11. // @require https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
  12. // @require https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js
  13. // @resource fancyboxCss https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css
  14. // @grant GM_getResourceText
  15. // @grant GM_xmlhttpRequest
  16. // @grant GM_notification
  17. // @grant GM_addStyle
  18. // @note 2018.08.08-v1.0.0 1.变更查看大图显示方式:不再弹出新标签页显示(部分浏览器会要求信任站点弹窗,所以摒弃掉),由当前页面弹层放大显示、2.新增下载及关闭按钮、3.按钮样式优化、
  19. // @note 2018.08.11-v1.1.0 1.解决点击右侧推荐视频后,查看封面依然是首次加载页面的封面图问题、2.优化触发事件的显示方式
  20. // @note 2018.08.25-v1.1.1 1.添加旧版番剧在全屏播放时设置进度条透明样式、2.全屏弹幕输入条不再遮挡字幕、3.添加插件 icon 图标
  21. // @note 2019.03.31-v1.1.2 移除进度条样式控制
  22. // @note 2020.04.18-v1.1.3 添加对B站新版样式兼容;优化弹窗体验
  23. // @note 2021.07.23-v1.2.0 适配新版样式;优化弹窗体验
  24. // ==/UserScript==
  25.  
  26. (function () {
  27. 'use strict';
  28.  
  29. // 1.添加弹窗样式表
  30. var fancyboxCss = GM_getResourceText("fancyboxCss");
  31. var cssNode = document.createElement("style");
  32. cssNode.setAttribute("type", "text/css");
  33. cssNode.setAttribute("name", "fancyboxCss");
  34. try{
  35. var buttonStyle = `a[data-fancybox]{margin: auto 20px;line-height: 18px;cursor: pointer;}.count-wrapper>a[data-fancybox]{color:inherit;}.count-wrapper>a[data-fancybox]:hover{color: #00a1d6;}.fancybox-content{border-radius: 8px;background-color: transparent!important;}`;
  36. cssNode.textContent = buttonStyle + fancyboxCss;
  37. document.querySelector("head").appendChild(cssNode);
  38. } catch (e){console.log(e.message);}
  39.  
  40. // 2.检测 jQuery 是否可用
  41. if (!window.jQuery) {
  42. // 若还未加载jQuery, 则监听
  43. (function waitForJquery(){
  44. if (!window.jQuery){
  45. setTimeout(waitForJquery, 100);
  46. } else appendCoverBtn();
  47. })();
  48. } else {
  49. appendCoverBtn();
  50. }
  51.  
  52. // 3.添加大图按钮
  53. function appendCoverBtn() {
  54.  
  55. var coverBtn = $(`<span><a id="bilibiliBigCoverLink" data-fancybox><i class="van-icon-info_playnumber"></i>&nbsp;查看封面大图</a></span>`).on('click',function(e){
  56. var imageurl;
  57. if ($('meta[itemprop="image"]').length !== 0){
  58. imageurl = $('meta[itemprop="image"]').attr("content");
  59. }else if($('meta[property="og:image"]').length !== 0){
  60. imageurl = $('meta[property="og:image"]').attr("content");
  61. }
  62. imageurl = imageurl.replace(/http[s]?\:/,'');
  63. $.fancybox.open({src: imageurl, buttons : ['zoom', 'download','close'], animationEffect: "zoom", hideScrollbar: false });
  64. return false;
  65. });
  66.  
  67. var appended = false;
  68. // 容器下每个子元素被修改时,都会触发此动作。采用监听`DOMSubtreeModified`方法是为了避免被官方异步加载的视频数据清空,DOM更新导致已被添加的按钮“重置”而无法挂载。故在DOM变更完成之后添加
  69. $(".count-wrapper,.video-info-m>.number,.video-data,#arc_toolbar_report>.ops").bind('DOMSubtreeModified', function(e) {
  70. if(!appended){
  71. appended = true;
  72. $(this).append(coverBtn);
  73. }
  74. });
  75.  
  76. // 兼容新版内容
  77. $(".media-count").each((index, ele) => {
  78. new MutationObserver(function(mutations, observe) {
  79. mutations.forEach(function(item, i){
  80. if(item.target.innerText.indexOf(coverBtn.text()) === -1){
  81. setTimeout(() => $(item.target).append(coverBtn), 1200)
  82. }
  83. });
  84. }).observe(ele, { childList: true, subtree: true });
  85. });
  86. }
  87.  
  88. })();
  89.  
  90.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址