Fix CSP error

This commit is contained in:
the1812 2019-09-02 11:05:16 +08:00
parent c47f7bc12e
commit 29c422a972
10 changed files with 86 additions and 18 deletions

View File

@ -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<Uint8Array>): Promise<string>;
static postJson(url: string, json: any): Promise<any>;
static postJsonWithCredentials(url: string, json: any): Promise<any>;
static monkey(details: MonkeyXhrBasicDetails): Promise<any>;
}
type Observable = string | Node | Node[] | NodeList;
class Observer {

View File

@ -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;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.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=`新版本<span>${n.versionString}</span>已发布. <a id="new-version-link" class="link" href="${e.latestVersionLink}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;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 <button class="gui-settings-flat-button" id="new-version-update">\n <a href="${e.latestVersionLink}" style="display:none"></a>\n <i class="icon-update"></i>\n <span>安装更新</span>\n </button>\n <button class="gui-settings-flat-button" id="new-version-info">\n <a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n <i class="icon-info"></i>\n <span>查看更新</span>\n </button>\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;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.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=`新版本<span>${n.versionString}</span>已发布. <a id="new-version-link" class="link" href="${e.latestVersionLink}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;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 <button class="gui-settings-flat-button" id="new-version-update">\n <a href="${e.latestVersionLink}" style="display:none"></a>\n <i class="icon-update"></i>\n <span>安装更新</span>\n </button>\n <button class="gui-settings-flat-button" id="new-version-info">\n <a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n <i class="icon-info"></i>\n <span>查看更新</span>\n </button>\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 <button class="gui-settings-flat-button" id="old-tweets">\n <i class="mdi mdi-24px mdi-swap-horizontal-variant"></i>\n <span>${s?"回到旧版":"转到新版"}</span>\n </button>`,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': '批量下载',

View File

@ -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;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.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=`新版本<span>${n.versionString}</span>已发布. <a id="new-version-link" class="link" href="${e.latestVersionLink}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;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 <button class="gui-settings-flat-button" id="new-version-update">\n <a href="${e.latestVersionLink}" style="display:none"></a>\n <i class="icon-update"></i>\n <span>安装更新</span>\n </button>\n <button class="gui-settings-flat-button" id="new-version-info">\n <a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n <i class="icon-info"></i>\n <span>查看更新</span>\n </button>\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;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.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=`新版本<span>${n.versionString}</span>已发布. <a id="new-version-link" class="link" href="${e.latestVersionLink}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;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 <button class="gui-settings-flat-button" id="new-version-update">\n <a href="${e.latestVersionLink}" style="display:none"></a>\n <i class="icon-update"></i>\n <span>安装更新</span>\n </button>\n <button class="gui-settings-flat-button" id="new-version-info">\n <a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n <i class="icon-info"></i>\n <span>查看更新</span>\n </button>\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 <button class="gui-settings-flat-button" id="old-tweets">\n <i class="mdi mdi-24px mdi-swap-horizontal-variant"></i>\n <span>${s?"回到旧版":"转到新版"}</span>\n </button>`,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': '批量下载',

View File

@ -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': '批量下载',

View File

@ -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': '批量下载',

View File

@ -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;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.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=`新版本<span>${n.versionString}</span>已发布. <a id="new-version-link" class="link" href="${e.latestVersionLink}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;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 <button class="gui-settings-flat-button" id="new-version-update">\n <a href="${e.latestVersionLink}" style="display:none"></a>\n <i class="icon-update"></i>\n <span>安装更新</span>\n </button>\n <button class="gui-settings-flat-button" id="new-version-info">\n <a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n <i class="icon-info"></i>\n <span>查看更新</span>\n </button>\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()}})}}}}})();
(()=>{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;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.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=`新版本<span>${n.versionString}</span>已发布. <a id="new-version-link" class="link" href="${e.latestVersionLink}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;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 <button class="gui-settings-flat-button" id="new-version-update">\n <a href="${e.latestVersionLink}" style="display:none"></a>\n <i class="icon-update"></i>\n <span>安装更新</span>\n </button>\n <button class="gui-settings-flat-button" id="new-version-info">\n <a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n <i class="icon-info"></i>\n <span>查看更新</span>\n </button>\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()}})}}}}})();

View File

@ -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 () {

View File

@ -276,7 +276,7 @@ Resource.manifest = {
path: 'download-video.min.js',
html: true,
style: 'instant',
dependencies: ['title'],
dependencies: ['title', 'videoInfo'],
displayNames: {
'downloadVideo': '下载视频',
'batchDownload': '批量下载',

View File

@ -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)

View File

@ -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)