Greasy Fork is available in English.
B站评论区直接展示 ip 属地
当前为
// ==UserScript==
// @name B站评论区开盒
// @namespace mscststs
// @version 0.1
// @description B站评论区直接展示 ip 属地
// @author mscststs
// @match *://*.bilibili.com/*
// @license ISC
// @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @run-at body
// @grant none
// ==/UserScript==
(function() {
'use strict';
hackEle(document.querySelector("head"), "insertBefore", hack)
hackEle(document.querySelector("head"), "appendChild", hack)
function hackEle(ele, func, callback){
const ori = ele[func];
ele[func] = function(...args){
callback(ori.bind(this), ...args)
}
};
function hack(origin, ...args){
const [ele, target] = [...args];
const src = ele.src;
if( ele.src && ~src.indexOf("/x/v2/reply/")){
// 确定是评论类型,执行额外流程
let url = new URL(src);
let oldName = url.searchParams.get("callback"); // 旧名称
let newName = `JSONP_FAKE_${Date.now()}_${Math.random()}`.replace(/\./g,""); // 新名称
url.searchParams.set("callback", newName);
ele.src = url.href;
window[newName] = function(obj){
// 处理数据
function addReplyLocation (reply){
if(reply.reply_control && reply.reply_control.location){
reply.member.uname = `${reply.member.uname} [${reply.reply_control.location}]`
}
if(reply.replies && reply.replies.length){
reply.replies.forEach(addReplyLocation)
}
}
if(obj.code === 0 && obj.data && obj.data.replies.length){
obj.data.replies.forEach(addReplyLocation)
}
window[oldName](obj);
delete window[newName];
}
}
origin(...args)
}
})();