Greasy Fork is available in English.
修改cookie回到旧版B站主页
当前为
"use strict";
// ==UserScript==
// @name 回到旧版B站主页
// @namespace http://salt.is.lovely/
// @version 0.1.3
// @description 修改cookie回到旧版B站主页
// @author salt
// @license MulanPSL2
// @match https://*.bilibili.com/*
// @icon https://www.bilibili.com/favicon.ico
// @grant none
// ==/UserScript==
// 开源在 github https://github.com/Salt-lovely/salt-bili-back
// 在 http://greasyfork.icu/zh-CN/scripts/475203 安装
/*
Copyright (c) 2023 Salt_lovaly
回到旧版B站主页 is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
(() => {
// node_modules/salt-lib/lib/storage/localStorage.js
function innerParse(str) {
if (str) {
try {
return JSON.parse(str);
} catch (e) {
}
}
return null;
}
function write(key, value2) {
localStorage.setItem(key, JSON.stringify(value2));
}
function unsafeRead(key) {
const storage = localStorage.getItem(key);
return innerParse(storage);
}
function listen(listener, options = { passive: true }) {
window.addEventListener("storage", listener, options);
return () => window.removeEventListener("storage", listener, options);
}
function readAndListen(props) {
const { key, defaultValue, listener, callOnChange = true, options = { passive: true } } = props;
let v = unsafeRead(key);
if (defaultValue !== void 0 && v === null) {
write(key, defaultValue);
v = defaultValue;
}
const fn = (ev) => {
if (ev.key !== key || ev.storageArea !== localStorage)
return;
const newValue = innerParse(ev.newValue);
const oldValue = innerParse(ev.oldValue);
if (callOnChange && newValue === oldValue)
return;
const encapsulatedEvent = {
key,
newValue,
oldValue,
storageArea: ev.storageArea,
url: ev.url
};
listener(encapsulatedEvent);
};
const off = listen(fn, options);
return [v, off];
}
// node_modules/js-cookie/dist/js.cookie.mjs
/*! js-cookie v3.0.5 | MIT */
function assign(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
target[key] = source[key];
}
}
return target;
}
var defaultConverter = {
read: function(value2) {
if (value2[0] === '"') {
value2 = value2.slice(1, -1);
}
return value2.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent);
},
write: function(value2) {
return encodeURIComponent(value2).replace(
/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,
decodeURIComponent
);
}
};
function init(converter, defaultAttributes) {
function set2(name, value2, attributes) {
if (typeof document === "undefined") {
return;
}
attributes = assign({}, defaultAttributes, attributes);
if (typeof attributes.expires === "number") {
attributes.expires = new Date(Date.now() + attributes.expires * 864e5);
}
if (attributes.expires) {
attributes.expires = attributes.expires.toUTCString();
}
name = encodeURIComponent(name).replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent).replace(/[()]/g, escape);
var stringifiedAttributes = "";
for (var attributeName in attributes) {
if (!attributes[attributeName]) {
continue;
}
stringifiedAttributes += "; " + attributeName;
if (attributes[attributeName] === true) {
continue;
}
stringifiedAttributes += "=" + attributes[attributeName].split(";")[0];
}
return document.cookie = name + "=" + converter.write(value2, name) + stringifiedAttributes;
}
function get(name) {
if (typeof document === "undefined" || arguments.length && !name) {
return;
}
var cookies = document.cookie ? document.cookie.split("; ") : [];
var jar = {};
for (var i = 0; i < cookies.length; i++) {
var parts = cookies[i].split("=");
var value2 = parts.slice(1).join("=");
try {
var found = decodeURIComponent(parts[0]);
jar[found] = converter.read(value2, found);
if (name === found) {
break;
}
} catch (e) {
}
}
return name ? jar[name] : jar;
}
return Object.create(
{
set: set2,
get,
remove: function(name, attributes) {
set2(
name,
"",
assign({}, attributes, {
expires: -1
})
);
},
withAttributes: function(attributes) {
return init(this.converter, assign({}, this.attributes, attributes));
},
withConverter: function(converter2) {
return init(assign({}, this.converter, converter2), this.attributes);
}
},
{
attributes: { value: Object.freeze(defaultAttributes) },
converter: { value: Object.freeze(converter) }
}
);
}
var api = init(defaultConverter, { path: "/" });
// src/utils.ts
var { remove, set } = api;
var defaultExpires = new Date(3398759114e3);
var defaultDomain = ".bilibili.com";
var NEW_UI = 0;
var OLD_UI = 1;
var TRADITION_UI = 2;
var STORAGE_KEY = "salt-lovely-bili-tool";
function setCookie(name, value2 = "", expires = defaultExpires, domain = defaultDomain) {
set(name, value2, { expires, domain });
}
function genResetCookieFn({
delMap,
setMap
}) {
console.log(`设置成功`);
if (delMap)
console.log(`将强制清除这些cookie: ${delMap.join(", ")}`);
if (setMap)
console.log(`将强制接管这些cookie: ${Object.keys(setMap).join(", ")}`);
return () => {
if (delMap)
delMap.forEach((c) => remove(c));
if (setMap)
Object.keys(setMap).forEach((c) => setCookie(c, setMap[c]));
};
}
// src/index.tsx
var interval = 0;
var setNewUI = () => {
clearInterval(interval);
setCookie("i-wanna-go-back", "0");
};
var setOldUI = () => {
clearInterval(interval);
const resetFn = genResetCookieFn({
delMap: ["buvid3"],
setMap: {
"i-wanna-go-back": "1",
"i-wanna-go-feeds": "-1",
nostalgia_conf: "2"
}
});
interval = setInterval(resetFn, 500);
};
var setTraditionalUI = () => {
clearInterval(interval);
const resetFn = genResetCookieFn({
delMap: ["buvid3", "buvid4", "buvid_fp"],
setMap: {
"i-wanna-go-back": "1",
"i-wanna-go-feeds": "1",
nostalgia_conf: "2"
}
});
interval = setInterval(resetFn, 500);
};
var setUICookie = (value2) => {
switch (value2) {
case NEW_UI:
setNewUI();
break;
case OLD_UI:
setOldUI();
break;
case TRADITION_UI:
setTraditionalUI();
break;
case null:
setNewUI();
break;
default:
console.log("无法识别的UI模式", value2);
setOldUI();
}
};
var [value] = readAndListen({
key: `${STORAGE_KEY}-ui-version`,
defaultValue: OLD_UI,
listener: (ev) => {
const { newValue } = ev;
setUICookie(newValue);
}
});
setUICookie(value);
console.log(
`
欢迎使用盐酱牌回到旧版B站主页脚本!
下个版本将会在屏幕底部添加切换按钮
`
);
})();