From 7bd220e688f905b056f2303bdf0e03ec326f6264 Mon Sep 17 00:00:00 2001 From: Stardream Date: Thu, 23 Apr 2026 19:16:23 +1000 Subject: [PATCH] feat(Bangumi_Topic_Share): multiple fixes and improvements, bump version to 6.1 - NSFW episode fallback: parse h2.title for ep number/name, extract subject from DOM - Fix share button incorrectly inserted into #timeline items - Fix AI config section right padding too wide - Open OAuth auth in centered popup window instead of new tab - Fix strikethrough not visible in card screenshot (iframe CSS override) - Limit card content images to 3, show omitted count tip Co-Authored-By: Claude Sonnet 4.6 --- js/Bangumi_Topic_Share.js | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/js/Bangumi_Topic_Share.js b/js/Bangumi_Topic_Share.js index 205733c..bc078c2 100644 --- a/js/Bangumi_Topic_Share.js +++ b/js/Bangumi_Topic_Share.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Bangumi Topic Share // @namespace http://tampermonkey.net/ -// @version 6.0 +// @version 6.1 // @description Bangumi 话题/日志分享工具:生成分享卡片,支持图片复制/下载、一键复制分享文案、可选 AI 标签 // @author Stardream // @contributor Chang ji, Mewtw0 @@ -83,9 +83,13 @@ } const startBgmOAuth = () => { + const w = 600, h = 600; + const left = Math.round(window.screenX + (window.outerWidth - w) / 2); + const top = Math.round(window.screenY + (window.outerHeight - h) / 2); window.open( `https://bgm.tv/oauth/authorize?client_id=${BGM_CLIENT_ID}&response_type=code&redirect_uri=${encodeURIComponent(BGM_REDIRECT_URI)}`, - '_blank' + 'bgm_oauth', + `width=${w},height=${h},left=${left},top=${top},popup=1` ); const onFocus = () => { window.removeEventListener('focus', onFocus); @@ -866,7 +870,30 @@ const ep = await fetchBangumiAPI(`episodes/${episodeId}`); if (!ep) { _shareNotice = 'NSFW 条目 API 无权访问,已降级为页面数据,部分信息可能不完整'; - return null; + let episodeName = '', epNumber = null; + const epH2 = document.querySelector('h2.title'); + if (epH2) { + let rawText = ''; + epH2.childNodes.forEach(n => { if (n.nodeType === 3) rawText += n.textContent; }); + rawText = rawText.trim(); + const epMatch = rawText.match(/^ep\.(\d+)\s*(.*)$/i); + if (epMatch) { epNumber = parseInt(epMatch[1]); episodeName = epMatch[2].trim() || rawText; } + else episodeName = rawText; + } + if (!episodeName) { + const h1Node = document.querySelector('#pageHeader h1') || document.querySelector('h1'); + if (h1Node) h1Node.childNodes.forEach(n => { if (n.nodeType === 3) episodeName += n.textContent; }); + episodeName = episodeName.replace(/[»\n]/g, '').trim(); + } + const subjectLink = document.querySelector('#headerSubject a[href*="/subject/"]') + || document.querySelector('#pageHeader a[href*="/subject/"]') + || document.querySelector('a.cover[href*="/subject/"]'); + const subjectName = subjectLink?.textContent?.trim() || ''; + const subjectImg = document.querySelector('img[src*="/pic/cover/l/"]') || document.querySelector('img[src*="/pic/cover/m/"]'); + const subjectImageUrl = subjectImg?.src || ''; + const result = { episodeName, subjectName, subjectImageUrl, epNumber, _domFallback: true }; + _episodeDataCache[episodeId] = result; + return result; } const subject = await fetchBangumiAPI(`subjects/${ep.subject_id}`); let subjectName = subject?.name_cn || subject?.name || ''; @@ -1417,7 +1444,7 @@ const postActions = targetDoc.querySelector('.entry-actions .post_actions') || targetDoc.querySelector('.postTopic .post_actions:not(.re_info)') || targetDoc.querySelector('[id^="post_"] .post_actions:not(.re_info)') - || [...targetDoc.querySelectorAll('.post_actions:not(.re_info)')].find(el => !el.closest('#sliderContainer') && !el.closest('#comment_box')); + || [...targetDoc.querySelectorAll('.post_actions:not(.re_info)')].find(el => !el.closest('#sliderContainer') && !el.closest('#comment_box') && !el.closest('#timeline')); if (postActions) { const wrap = targetDoc.createElement('span'); wrap.className = 'action'; @@ -1702,7 +1729,7 @@
AI 标签配置(可选)
-
+
@@ -1784,4 +1811,4 @@ }); _panelObs.observe(document.body, { childList: true, subtree: true }); } -})(); +})(); \ No newline at end of file