Greasy Fork is available in English.
每条评论都会显示该评论的永久链接,可以用于分享评论给他人或者自行保留以后免翻页回看。默认左击新窗口打开,右击菜单复制链接。
很好用,但是在稍后再看和收藏的视频合集里面,无法使用这个评论永久链接,可以添加这个两个的支持吗
// ==UserScript==
// @name 哔哩哔哩 评论分享永久链接 (增强版-带复制)
// @version 2025.06.17
// @description 每条评论都会显示该评论的永久链接和一个复制按钮。支持普通视频页、稍后再看、收藏夹等。左击永久链接新窗口打开,右击可复制;或直接点击复制按钮。
// @namespace http://greasyfork.icu/users/159546
// @author LEORChn (Modified by AI)
// @match https://www.bilibili.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=www.bilibili.com
// @grant none
// @run-at document-body
// @downloadURL https://update.greasyfork.icu/scripts/539513/%E5%93%94%E5%93%A9%E5%93%A9%20%E8%AF%84%E8%AE%BA%E5%88%86%E4%BA%AB%E6%B0%B8%E4%B9%85%E9%93%BE%E6%8E%A5.user.js
// @updateURL https://update.greasyfork.icu/scripts/539513/%E5%93%94%E5%93%A9%E5%93%A9%20%E8%AF%84%E8%AE%BA%E5%88%86%E4%BA%AB%E6%B0%B8%E4%B9%85%E9%93%BE%E6%8E%A5.meta.js
// ==/UserScript==
(()=>{
setInterval(()=>{
const pathname = location.pathname;
if (!pathname.startsWith('/video/') && !pathname.startsWith('/list/')) return;
$$("#commentapp > bili-comments").shadow("#feed > bili-comment-thread-renderer").shadow("#comment")
.shadow("bili-comment-action-buttons-renderer:not([leorchn-comment-permalink])").forEach(e=>{
var j = e.getRootNode().host.__data;
if(!j || !j.rpid) return;
let videoPath;
if (pathname.startsWith('/video/')) {
videoPath = pathname;
} else if (pathname.startsWith('/list/')) {
const params = new URLSearchParams(location.search);
const bvid = params.get('bvid');
if (bvid) {
videoPath = '/video/' + bvid;
} else {
return;
}
} else {
return;
}
// [核心修改] 开始
// 1. 先构造好链接URL
const permalinkUrl = location.origin + videoPath + '#reply' + j.rpid;
// 2. 创建“永久链接”
var permalinkA = ct('a', '永久链接');
permalinkA.href = permalinkUrl;
permalinkA.target = '_blank';
permalinkA.style.marginRight = '8px'; // 增加一点右边距,让两个按钮分开
// 3. 创建“复制”按钮
var copyBtn = ct('a', '复制');
copyBtn.href = 'javascript:void(0);'; // 设置href防止页面跳转
copyBtn.style.cursor = 'pointer'; // 鼠标样式改为手型
// 4. 为“复制”按钮添加点击事件
copyBtn.addEventListener('click', (event) => {
event.preventDefault(); // 阻止默认行为
event.stopPropagation(); // 阻止事件冒泡
navigator.clipboard.writeText(permalinkUrl).then(() => {
// 复制成功,提供反馈
copyBtn.innerText = '已复制!';
setTimeout(() => {
copyBtn.innerText = '复制';
}, 1500); // 1.5秒后恢复
}).catch(err => {
// 复制失败的处理
console.error('复制评论链接失败: ', err);
alert('复制失败,请检查浏览器权限或手动复制。');
});
});
// 5. 将两个按钮都放进容器div
var div = ct('div');
div.style.cssText = 'text-align: right; flex: 1; padding-right: 1em; user-select: none;';
div.appendChild(permalinkA);
div.appendChild(copyBtn);
e.shadowRoot.insertBefore(div, e.shadowRoot.querySelector('#more'));
// [核心修改] 结束
e.setAttribute('leorchn-comment-permalink', '');
});
}, 1e3);
// 辅助函数 (保持不变)
function ct(e, t){
var a;
if(e){
a = document.createElement(e);
if(t !== void 0) a[e == 'input'? 'value': 'innerText'] = t;
}else{
a = document.createTextNode(t);
}
return a;
}
function $$(e){
return factory(document.querySelectorAll(e));
function factory(e){
e = Array.from(e);
e.shadow = shadow;
e.has = has;
return e;
}
function shadow(e){
return factory(this.map(elem=>{
return factory(elem.shadowRoot.querySelectorAll(e));
}).flat());
}
function has(e){
return factory(this.filter(elem=>{
return elem.querySelectorAll(e).length;
}));
}
function is(e){
return factory(this.map(elem=>{
return factory(elem.querySelectorAll(e));
}).flat());
}
}
})();
很好用,但是在稍后再看和收藏的视频合集里面,无法使用这个评论永久链接,可以添加这个两个的支持吗