From 29c422a9729e6e4a7b1c761b7fc1836ce9f08b4d Mon Sep 17 00:00:00 2001 From: the1812 Date: Mon, 2 Sep 2019 11:05:16 +0800 Subject: [PATCH] Fix CSP error --- @types/global/index.d.ts | 5 ++++- bilibili-evolved.offline.user.js | 19 ++++++++++++++++--- bilibili-evolved.preview-offline.user.js | 19 ++++++++++++++++--- bilibili-evolved.preview.user.js | 19 ++++++++++++++++--- bilibili-evolved.user.js | 19 ++++++++++++++++--- min/notify-new-version.min.js | 2 +- src/client/ajax.js | 13 +++++++++++++ src/client/resource-manifest.js | 2 +- src/client/resource.js | 4 ++-- src/utils/notify-new-version.js | 2 +- 10 files changed, 86 insertions(+), 18 deletions(-) diff --git a/@types/global/index.d.ts b/@types/global/index.d.ts index 36d4e059a..6293fbac0 100644 --- a/@types/global/index.d.ts +++ b/@types/global/index.d.ts @@ -13,7 +13,7 @@ declare global { responseXML: Document responseText: string } - interface MonkeyXhrDetails { + interface MonkeyXhrBasicDetails { method: 'GET' | 'POST' | 'HEAD' url: string headers?: { [name: string]: string }, @@ -27,6 +27,8 @@ declare global { fetch?: boolean username?: string password?: string + } + interface MonkeyXhrDetails extends MonkeyXhrBasicDetails { onabort?: (response: MonkeyXhrResponse) => void onerror?: (response: MonkeyXhrResponse) => void onloadstart?: (response: MonkeyXhrResponse) => void @@ -206,6 +208,7 @@ declare global { static postTextWithCredentials(url: string, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream): Promise; static postJson(url: string, json: any): Promise; static postJsonWithCredentials(url: string, json: any): Promise; + static monkey(details: MonkeyXhrBasicDetails): Promise; } type Observable = string | Node | Node[] | NodeList; class Observer { diff --git a/bilibili-evolved.offline.user.js b/bilibili-evolved.offline.user.js index 1efd444e6..f13fd329f 100644 --- a/bilibili-evolved.offline.user.js +++ b/bilibili-evolved.offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Offline) -// @version 412.35 +// @version 412.80 // @description Bilibili Evolved 的离线版, 所有功能都已内置于脚本中. // @author Grant Howard, Coulomb-G // @copyright 2019, Grant Howard (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G) @@ -471,6 +471,19 @@ class Ajax { const handlers = Ajax.getHandlers(type) handlers.splice(handlers.indexOf(handler), 1) } + static monkey (details) { + return new Promise((resolve, reject) => { + const fullDetails = { + ...details, + onload: r => resolve(r.response), + onerror: r => reject(r), + } + if (!('method' in fullDetails)) { + fullDetails.method = 'GET' + } + GM_xmlhttpRequest(fullDetails) + }) + } } // https://github.com/the1812/Bilibili-Evolved/issues/84 function setupAjaxHook () { @@ -1025,7 +1038,7 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/no-banner.min.css"] = `#banner_link,.z-top-container.has-banner>.header{display:none!important}.b-header-mask-wrp .b-header-mask-bg,div.blur-bg{opacity:0!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/no-live-autoplay.min.js"] = (()=>{return(e,t)=>{(async()=>{const e=document.URL.replace(window.location.search,"");if(e!=="https://live.bilibili.com/"&&e!=="https://live.bilibili.com/index.html"){return}SpinQuery.condition(()=>document.querySelector(".component-ctnr video,.bilibili-live-player-video video"),e=>e&&!e.paused,()=>{const e=document.querySelector(".bilibili-live-player-video-controller-start-btn>button");e.click()});const t="hide-home-live-style";addSettingsListener("hideHomeLive",e=>{if(e===true){const e=document.createElement("style");e.innerText=`.player-area-ctnr,#player-header { display: none !important }`;e.id=t;document.body.append(e)}else{const e=document.getElementById(t);e&&e.remove()}},true)})()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/no-mini-video-autoplay.min.js"] = (()=>{return(r,e)=>{}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/notify-new-version.min.js"] = (()=>{return(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let t=0;te.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}async function r(){if(typeof offlineData!=="undefined"){return false}try{const t=await Ajax.getText(Resource.root+"version.txt");const n=new s(t);const r=new s(e.currentVersion);const i=n.greaterThan(r);if(i){const t=`新版本${n.versionString}已发布. 安装查看`;const s=Toast.info(t,"检查更新");SpinQuery.select("#new-version-link").then(e=>e.addEventListener("click",()=>{s&&s.dismiss()}))}return i}catch(e){return false}}return{widget:{content:`\n \n \n `,condition:r,success:()=>{document.querySelector("#new-version-update").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}});document.querySelector("#new-version-info").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}})}}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/notify-new-version.min.js"] = (()=>{return(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let t=0;te.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}async function r(){if(typeof offlineData!=="undefined"){return false}try{const t=await Ajax.monkey({url:Resource.root+"version.txt"});const n=new s(t);const r=new s(e.currentVersion);const i=n.greaterThan(r);if(i){const t=`新版本${n.versionString}已发布. 安装查看`;const s=Toast.info(t,"检查更新");SpinQuery.select("#new-version-link").then(e=>e.addEventListener("click",()=>{s&&s.dismiss()}))}return i}catch(e){return false}}return{widget:{content:`\n \n \n `,condition:r,success:()=>{document.querySelector("#new-version-update").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}});document.querySelector("#new-version-info").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/old-tweets.min.js"] = (()=>{return(t,i)=>{const n=[`a.read-more[href*='t.bilibili.com']`,`.link-navbar a[href*='t.bilibili.com']`,`.bili-header-m .nav-menu .nav-con .nav-item [href*='t.bilibili.com']`];const o=`https://www.bilibili.com/account/dynamic`;const e=`https://t.bilibili.com/`;const c=()=>{for(const t of n){SpinQuery.any(()=>document.querySelectorAll(t),t=>t.forEach(t=>t.setAttribute("href",o)))}};SpinQuery.select(".dynamic-m .wnd_bottom .r-l").then(t=>{if(t!==null){Observer.childList(".dynamic-m .wnd_bottom .r-l",c)}});c();const s=location.host==="t.bilibili.com";return{widget:{condition:()=>{return document.URL.startsWith(e)||document.URL.startsWith(o)},content:`\n `,success:()=>{const t=document.querySelector("#old-tweets");t.addEventListener("click",()=>{location.assign(s?o:e)})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/old.min.css"] = `.b-header-mask-wrp .b-header-mask,.bili-header-m>.nav-menu{background:var(--theme-color)!important;box-shadow:var(--theme-color-70) 0 2px 10px 1px!important}.b-header-mask-wrp,.z_top,body .bili-header-m .nav-menu div.nav-mask{background-color:transparent!important;box-shadow:none!important}.b-header-mask-wrp{overflow:unset!important}.bili-header-m .nav-menu .nav-con .nav-item .t,.z_top.b-header-blur .z_top_nav li:not(.home) a.i-link{color:var(--foreground-color-d)!important}.uns_box ul.menu li:not(.b-post):hover,.z_top .z_top_nav ul li:hover,li.nav-item:not(.profile-info):hover{background-color:hsla(0,0%,var(--brightness),.2)!important}.vip-m{background:#fff!important}a.t>i.bili-icon{filter:brightness(0) var(--invert-filter)!important;background-image:url(https://www.bilibili.com/favicon.ico)!important;background-size:cover!important;background-position:inherit!important;width:16px!important;height:16px!important;opacity:.81!important}.header-icon-bilibili-tv{filter:brightness(0) var(--invert-filter)!important;opacity:.81;transform:scale(.9)}.z_top .z_top_nav ul li.home{filter:brightness(0) invert(1)!important;background:url(https://www.bilibili.com/favicon.ico) left center/16px no-repeat!important;opacity:.81!important;background-position-x:16%!important}#entryOld,.b-icon-app,.nav-search-submit,.title-icon,.uns_box li.u-i.b-post .up-new,.z_top .z_top_nav li .beta,.z_top .z_top_nav li .new,body>#Header{display:none!important}.i-face>.face,.uns_box li.u-i .i_face{box-shadow:0 0 2px 1.5px #0002!important}div.up-load{margin:5px 0 0 5px!important;height:32px!important}.u-link,.uns_box li.u-i.b-post a.i-link{background:0 0!important;color:var(--foreground-color-d)!important;border-radius:4px!important;line-height:30px!important;height:30px!important;border:1px solid!important;transition:background-color .2s!important}.u-link:hover,.uns_box li.u-i.b-post a.i-link:hover{opacity:1!important;background-color:hsla(0,0%,var(--brightness),.2)!important}.uns_box li.u-i.b-post{margin-left:8px!important}.nav-search{width:140px!important}.nav-search-keyword{width:130px!important;margin-right:32px!important}#nav_searchform{border-radius:4px!important;background:#fffb!important;border:none!important;transition:background-color .2s!important;box-shadow:0 2px 10px 1px #0002}#nav_searchform:hover{background-color:#fff!important}.nav-search-submit{top:2px!important}.showSearch .nav-search-submit{top:4px!important}#bilibiliPlayer{box-shadow:0 4px 16px 0 var(--theme-color-40)!important}.blur-bg{opacity:var(--blur-background-opacity)!important;filter:blur(20px)!important}.suggest-item .cancel{width:28px!important}ul.bilibili-suggest{margin-left:-30px!important;width:200px!important}li.suggest-item>a{max-width:155px!important}.nav-item div.num{box-shadow:0 .5px 4px 0 #0004!important}#primary_menu,#primary_menu>ul.nav-menu,.uns_box li.u-i.b-post{display:flex!important;align-items:center!important}#primary_menu,div.nav-gif{padding:0!important}.up-nav{top:37px!important}.filter-item.search,body{margin:0!important}.input-box textarea{padding:8px!important}.bili-header-m .nav-search .nav-search-keyword{color:#222!important}.tag-container .tag-item .tag-border .tag-border-inner{width:100%!important}.search-module .search-block input::placeholder,input.nav-search-keyword::placeholder{color:#888!important}#home_noob.guide-box{display:flex!important}@media only screen and (min-width:1291px){.bilibili-suggest.nav,.nav-search{width:250px!important}.nav-search-keyword{width:240px!important}ul.bilibili-suggest{margin-left:0!important;width:250px!important}li.suggest-item>a{max-width:205px!important}}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/outer-watchlater.min.css"] = `.ops .watchlater{margin-right:28px!important;position:relative}.ops .watchlater .tip{position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);z-index:1000;background:#000d;padding:4px 8px;border-radius:4px;color:#eee;transition:.2s ease-out;opacity:0;pointer-events:none}.watchlater .tip.show{opacity:1;pointer-events:initial}.ops .watchlater>i{display:inline-block;font-style:normal;vertical-align:baseline;text-align:center;text-transform:none;line-height:1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}.more-ops-list>ul>li:nth-child(2){display:none!important}`; @@ -1484,7 +1497,7 @@ Resource.manifest = { path: 'download-video.min.js', html: true, style: 'instant', - dependencies: ['title'], + dependencies: ['title', 'videoInfo'], displayNames: { 'downloadVideo': '下载视频', 'batchDownload': '批量下载', diff --git a/bilibili-evolved.preview-offline.user.js b/bilibili-evolved.preview-offline.user.js index 2e104f16b..6edec0a5a 100644 --- a/bilibili-evolved.preview-offline.user.js +++ b/bilibili-evolved.preview-offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Preview Offline) -// @version 412.35 +// @version 412.80 // @description Bilibili Evolved 的预览离线版, 可以抢先体验新功能, 并且所有功能都已内置于脚本中. // @author Grant Howard, Coulomb-G // @copyright 2019, Grant Howard (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G) @@ -471,6 +471,19 @@ class Ajax { const handlers = Ajax.getHandlers(type) handlers.splice(handlers.indexOf(handler), 1) } + static monkey (details) { + return new Promise((resolve, reject) => { + const fullDetails = { + ...details, + onload: r => resolve(r.response), + onerror: r => reject(r), + } + if (!('method' in fullDetails)) { + fullDetails.method = 'GET' + } + GM_xmlhttpRequest(fullDetails) + }) + } } // https://github.com/the1812/Bilibili-Evolved/issues/84 function setupAjaxHook () { @@ -1025,7 +1038,7 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/no-banner.min.css"] = `#banner_link,.z-top-container.has-banner>.header{display:none!important}.b-header-mask-wrp .b-header-mask-bg,div.blur-bg{opacity:0!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/no-live-autoplay.min.js"] = (()=>{return(e,t)=>{(async()=>{const e=document.URL.replace(window.location.search,"");if(e!=="https://live.bilibili.com/"&&e!=="https://live.bilibili.com/index.html"){return}SpinQuery.condition(()=>document.querySelector(".component-ctnr video,.bilibili-live-player-video video"),e=>e&&!e.paused,()=>{const e=document.querySelector(".bilibili-live-player-video-controller-start-btn>button");e.click()});const t="hide-home-live-style";addSettingsListener("hideHomeLive",e=>{if(e===true){const e=document.createElement("style");e.innerText=`.player-area-ctnr,#player-header { display: none !important }`;e.id=t;document.body.append(e)}else{const e=document.getElementById(t);e&&e.remove()}},true)})()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/no-mini-video-autoplay.min.js"] = (()=>{return(r,e)=>{}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/notify-new-version.min.js"] = (()=>{return(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let t=0;te.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}async function r(){if(typeof offlineData!=="undefined"){return false}try{const t=await Ajax.getText(Resource.root+"version.txt");const n=new s(t);const r=new s(e.currentVersion);const i=n.greaterThan(r);if(i){const t=`新版本${n.versionString}已发布. 安装查看`;const s=Toast.info(t,"检查更新");SpinQuery.select("#new-version-link").then(e=>e.addEventListener("click",()=>{s&&s.dismiss()}))}return i}catch(e){return false}}return{widget:{content:`\n \n \n `,condition:r,success:()=>{document.querySelector("#new-version-update").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}});document.querySelector("#new-version-info").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}})}}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/notify-new-version.min.js"] = (()=>{return(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let t=0;te.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}async function r(){if(typeof offlineData!=="undefined"){return false}try{const t=await Ajax.monkey({url:Resource.root+"version.txt"});const n=new s(t);const r=new s(e.currentVersion);const i=n.greaterThan(r);if(i){const t=`新版本${n.versionString}已发布. 安装查看`;const s=Toast.info(t,"检查更新");SpinQuery.select("#new-version-link").then(e=>e.addEventListener("click",()=>{s&&s.dismiss()}))}return i}catch(e){return false}}return{widget:{content:`\n \n \n `,condition:r,success:()=>{document.querySelector("#new-version-update").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}});document.querySelector("#new-version-info").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/old-tweets.min.js"] = (()=>{return(t,i)=>{const n=[`a.read-more[href*='t.bilibili.com']`,`.link-navbar a[href*='t.bilibili.com']`,`.bili-header-m .nav-menu .nav-con .nav-item [href*='t.bilibili.com']`];const o=`https://www.bilibili.com/account/dynamic`;const e=`https://t.bilibili.com/`;const c=()=>{for(const t of n){SpinQuery.any(()=>document.querySelectorAll(t),t=>t.forEach(t=>t.setAttribute("href",o)))}};SpinQuery.select(".dynamic-m .wnd_bottom .r-l").then(t=>{if(t!==null){Observer.childList(".dynamic-m .wnd_bottom .r-l",c)}});c();const s=location.host==="t.bilibili.com";return{widget:{condition:()=>{return document.URL.startsWith(e)||document.URL.startsWith(o)},content:`\n `,success:()=>{const t=document.querySelector("#old-tweets");t.addEventListener("click",()=>{location.assign(s?o:e)})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/old.min.css"] = `.b-header-mask-wrp .b-header-mask,.bili-header-m>.nav-menu{background:var(--theme-color)!important;box-shadow:var(--theme-color-70) 0 2px 10px 1px!important}.b-header-mask-wrp,.z_top,body .bili-header-m .nav-menu div.nav-mask{background-color:transparent!important;box-shadow:none!important}.b-header-mask-wrp{overflow:unset!important}.bili-header-m .nav-menu .nav-con .nav-item .t,.z_top.b-header-blur .z_top_nav li:not(.home) a.i-link{color:var(--foreground-color-d)!important}.uns_box ul.menu li:not(.b-post):hover,.z_top .z_top_nav ul li:hover,li.nav-item:not(.profile-info):hover{background-color:hsla(0,0%,var(--brightness),.2)!important}.vip-m{background:#fff!important}a.t>i.bili-icon{filter:brightness(0) var(--invert-filter)!important;background-image:url(https://www.bilibili.com/favicon.ico)!important;background-size:cover!important;background-position:inherit!important;width:16px!important;height:16px!important;opacity:.81!important}.header-icon-bilibili-tv{filter:brightness(0) var(--invert-filter)!important;opacity:.81;transform:scale(.9)}.z_top .z_top_nav ul li.home{filter:brightness(0) invert(1)!important;background:url(https://www.bilibili.com/favicon.ico) left center/16px no-repeat!important;opacity:.81!important;background-position-x:16%!important}#entryOld,.b-icon-app,.nav-search-submit,.title-icon,.uns_box li.u-i.b-post .up-new,.z_top .z_top_nav li .beta,.z_top .z_top_nav li .new,body>#Header{display:none!important}.i-face>.face,.uns_box li.u-i .i_face{box-shadow:0 0 2px 1.5px #0002!important}div.up-load{margin:5px 0 0 5px!important;height:32px!important}.u-link,.uns_box li.u-i.b-post a.i-link{background:0 0!important;color:var(--foreground-color-d)!important;border-radius:4px!important;line-height:30px!important;height:30px!important;border:1px solid!important;transition:background-color .2s!important}.u-link:hover,.uns_box li.u-i.b-post a.i-link:hover{opacity:1!important;background-color:hsla(0,0%,var(--brightness),.2)!important}.uns_box li.u-i.b-post{margin-left:8px!important}.nav-search{width:140px!important}.nav-search-keyword{width:130px!important;margin-right:32px!important}#nav_searchform{border-radius:4px!important;background:#fffb!important;border:none!important;transition:background-color .2s!important;box-shadow:0 2px 10px 1px #0002}#nav_searchform:hover{background-color:#fff!important}.nav-search-submit{top:2px!important}.showSearch .nav-search-submit{top:4px!important}#bilibiliPlayer{box-shadow:0 4px 16px 0 var(--theme-color-40)!important}.blur-bg{opacity:var(--blur-background-opacity)!important;filter:blur(20px)!important}.suggest-item .cancel{width:28px!important}ul.bilibili-suggest{margin-left:-30px!important;width:200px!important}li.suggest-item>a{max-width:155px!important}.nav-item div.num{box-shadow:0 .5px 4px 0 #0004!important}#primary_menu,#primary_menu>ul.nav-menu,.uns_box li.u-i.b-post{display:flex!important;align-items:center!important}#primary_menu,div.nav-gif{padding:0!important}.up-nav{top:37px!important}.filter-item.search,body{margin:0!important}.input-box textarea{padding:8px!important}.bili-header-m .nav-search .nav-search-keyword{color:#222!important}.tag-container .tag-item .tag-border .tag-border-inner{width:100%!important}.search-module .search-block input::placeholder,input.nav-search-keyword::placeholder{color:#888!important}#home_noob.guide-box{display:flex!important}@media only screen and (min-width:1291px){.bilibili-suggest.nav,.nav-search{width:250px!important}.nav-search-keyword{width:240px!important}ul.bilibili-suggest{margin-left:0!important;width:250px!important}li.suggest-item>a{max-width:205px!important}}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/outer-watchlater.min.css"] = `.ops .watchlater{margin-right:28px!important;position:relative}.ops .watchlater .tip{position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);z-index:1000;background:#000d;padding:4px 8px;border-radius:4px;color:#eee;transition:.2s ease-out;opacity:0;pointer-events:none}.watchlater .tip.show{opacity:1;pointer-events:initial}.ops .watchlater>i{display:inline-block;font-style:normal;vertical-align:baseline;text-align:center;text-transform:none;line-height:1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}.more-ops-list>ul>li:nth-child(2){display:none!important}`; @@ -1484,7 +1497,7 @@ Resource.manifest = { path: 'download-video.min.js', html: true, style: 'instant', - dependencies: ['title'], + dependencies: ['title', 'videoInfo'], displayNames: { 'downloadVideo': '下载视频', 'batchDownload': '批量下载', diff --git a/bilibili-evolved.preview.user.js b/bilibili-evolved.preview.user.js index de9b2e53f..babf18017 100644 --- a/bilibili-evolved.preview.user.js +++ b/bilibili-evolved.preview.user.js @@ -470,6 +470,19 @@ class Ajax { const handlers = Ajax.getHandlers(type) handlers.splice(handlers.indexOf(handler), 1) } + static monkey (details) { + return new Promise((resolve, reject) => { + const fullDetails = { + ...details, + onload: r => resolve(r.response), + onerror: r => reject(r), + } + if (!('method' in fullDetails)) { + fullDetails.method = 'GET' + } + GM_xmlhttpRequest(fullDetails) + }) + } } // https://github.com/the1812/Bilibili-Evolved/issues/84 function setupAjaxHook () { @@ -1031,7 +1044,7 @@ class Resource { this.text = cache resolve(cache) } - Ajax.getText(this.url).then(text => { + Ajax.monkey({ url: this.url }).then(text => { this.text = this.type.preprocessor(text) if (text === null) { reject('download failed') @@ -1048,7 +1061,7 @@ class Resource { } }).catch(error => reject(error)) } else { - Ajax.getText(this.url) + Ajax.monkey({ url: this.url }) .then(text => { this.text = this.type.preprocessor(text) resolve(this.text) @@ -1377,7 +1390,7 @@ Resource.manifest = { path: 'download-video.min.js', html: true, style: 'instant', - dependencies: ['title'], + dependencies: ['title', 'videoInfo'], displayNames: { 'downloadVideo': '下载视频', 'batchDownload': '批量下载', diff --git a/bilibili-evolved.user.js b/bilibili-evolved.user.js index fd1bcdb24..2158138ec 100644 --- a/bilibili-evolved.user.js +++ b/bilibili-evolved.user.js @@ -470,6 +470,19 @@ class Ajax { const handlers = Ajax.getHandlers(type) handlers.splice(handlers.indexOf(handler), 1) } + static monkey (details) { + return new Promise((resolve, reject) => { + const fullDetails = { + ...details, + onload: r => resolve(r.response), + onerror: r => reject(r), + } + if (!('method' in fullDetails)) { + fullDetails.method = 'GET' + } + GM_xmlhttpRequest(fullDetails) + }) + } } // https://github.com/the1812/Bilibili-Evolved/issues/84 function setupAjaxHook () { @@ -1031,7 +1044,7 @@ class Resource { this.text = cache resolve(cache) } - Ajax.getText(this.url).then(text => { + Ajax.monkey({ url: this.url }).then(text => { this.text = this.type.preprocessor(text) if (text === null) { reject('download failed') @@ -1048,7 +1061,7 @@ class Resource { } }).catch(error => reject(error)) } else { - Ajax.getText(this.url) + Ajax.monkey({ url: this.url }) .then(text => { this.text = this.type.preprocessor(text) resolve(this.text) @@ -1377,7 +1390,7 @@ Resource.manifest = { path: 'download-video.min.js', html: true, style: 'instant', - dependencies: ['title'], + dependencies: ['title', 'videoInfo'], displayNames: { 'downloadVideo': '下载视频', 'batchDownload': '批量下载', diff --git a/min/notify-new-version.min.js b/min/notify-new-version.min.js index fe171f124..f3e86827c 100644 --- a/min/notify-new-version.min.js +++ b/min/notify-new-version.min.js @@ -1 +1 @@ -(()=>{return(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let t=0;te.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}async function r(){if(typeof offlineData!=="undefined"){return false}try{const t=await Ajax.getText(Resource.root+"version.txt");const n=new s(t);const r=new s(e.currentVersion);const i=n.greaterThan(r);if(i){const t=`新版本${n.versionString}已发布. 安装查看`;const s=Toast.info(t,"检查更新");SpinQuery.select("#new-version-link").then(e=>e.addEventListener("click",()=>{s&&s.dismiss()}))}return i}catch(e){return false}}return{widget:{content:`\n \n \n `,condition:r,success:()=>{document.querySelector("#new-version-update").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}});document.querySelector("#new-version-info").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}})}}}}})(); \ No newline at end of file +(()=>{return(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let t=0;te.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}async function r(){if(typeof offlineData!=="undefined"){return false}try{const t=await Ajax.monkey({url:Resource.root+"version.txt"});const n=new s(t);const r=new s(e.currentVersion);const i=n.greaterThan(r);if(i){const t=`新版本${n.versionString}已发布. 安装查看`;const s=Toast.info(t,"检查更新");SpinQuery.select("#new-version-link").then(e=>e.addEventListener("click",()=>{s&&s.dismiss()}))}return i}catch(e){return false}}return{widget:{content:`\n \n \n `,condition:r,success:()=>{document.querySelector("#new-version-update").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}});document.querySelector("#new-version-info").addEventListener("click",e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}})}}}}})(); \ No newline at end of file diff --git a/src/client/ajax.js b/src/client/ajax.js index 7f0079f30..c65ec5626 100644 --- a/src/client/ajax.js +++ b/src/client/ajax.js @@ -84,6 +84,19 @@ export class Ajax { const handlers = Ajax.getHandlers(type) handlers.splice(handlers.indexOf(handler), 1) } + static monkey (details) { + return new Promise((resolve, reject) => { + const fullDetails = { + ...details, + onload: r => resolve(r.response), + onerror: r => reject(r), + } + if (!('method' in fullDetails)) { + fullDetails.method = 'GET' + } + GM_xmlhttpRequest(fullDetails) + }) + } } // https://github.com/the1812/Bilibili-Evolved/issues/84 export function setupAjaxHook () { diff --git a/src/client/resource-manifest.js b/src/client/resource-manifest.js index 2758e4c44..d7f3cdc4c 100644 --- a/src/client/resource-manifest.js +++ b/src/client/resource-manifest.js @@ -276,7 +276,7 @@ Resource.manifest = { path: 'download-video.min.js', html: true, style: 'instant', - dependencies: ['title'], + dependencies: ['title', 'videoInfo'], displayNames: { 'downloadVideo': '下载视频', 'batchDownload': '批量下载', diff --git a/src/client/resource.js b/src/client/resource.js index abcd3f243..e705aba85 100644 --- a/src/client/resource.js +++ b/src/client/resource.js @@ -58,7 +58,7 @@ export class Resource { this.text = cache resolve(cache) } - Ajax.getText(this.url).then(text => { + Ajax.monkey({ url: this.url }).then(text => { this.text = this.type.preprocessor(text) if (text === null) { reject('download failed') @@ -75,7 +75,7 @@ export class Resource { } }).catch(error => reject(error)) } else { - Ajax.getText(this.url) + Ajax.monkey({ url: this.url }) .then(text => { this.text = this.type.preprocessor(text) resolve(this.text) diff --git a/src/utils/notify-new-version.js b/src/utils/notify-new-version.js index 628f20cb8..4c80a6590 100644 --- a/src/utils/notify-new-version.js +++ b/src/utils/notify-new-version.js @@ -46,7 +46,7 @@ async function checkNewVersion () { return false } try { - const latestVersionText = await Ajax.getText(Resource.root + 'version.txt') + const latestVersionText = await Ajax.monkey({ url: Resource.root + 'version.txt' }) const latestVersion = new Version(latestVersionText) const currentVersion = new Version(settings.currentVersion) const hasNewVersion = latestVersion.greaterThan(currentVersion)