我正在尝试创建一个简单的tampermonkey脚本,在切换频道后滚动到不和谐的页面最底部,该脚本应该等待5秒,然后滚动到频道底部,这样我就可以看到最近的内容留言
代码目前什么也不做,我想要它做的是滚动到页面的最底部
这是我尝试过的代码
(function() {
'use strict';
function scrollToBottom() {
const scroller = document.querySelector('div[class*="scrollerContent-"]');
if (scroller) {
scroller.scrollTop = scroller.scrollHeight;
}
}
function setupURLChangeObserver() {
window.addEventListener('popstate', () => {
setTimeout(scrollToBottom, 500); // Delay to allow content to load
});
}
setupURLChangeObserver();
})();
(function() {
'use strict';
function simulateMouseScroll() {
const scroller = document.querySelector('div[class*="scrollerContent-"]');
if (scroller) {
for (let i = 0; i < 100; i++) {
scroller.dispatchEvent(new WheelEvent('wheel', { deltaY: 100, bubbles: true }));
}
}
}
function setupURLChangeObserver() {
window.addEventListener('popstate', () => {
setTimeout(simulateMouseScroll, 500); // Delay to allow content to load
});
}
setupURLChangeObserver();
})();
我也尝试过
scroller.scrollTo(0, maxScrollTop);
您的选择器 (
div[class*="scrollerContent-"]
) 不正确,并且 popstate
仅在 特定情况下触发。
使用 Navigation API 代替,但 Firefox 尚不支持。作为替代方案,您可以使用 window.onurlchange (仅限 Tampermonkey)。
有关检测导航的跨浏览器/脚本管理器方法,请参阅我之前的答案此处。
这应该适用于 Chrome + Tampermonkey:
window.navigation.addEventListener('navigatesuccess', () => {
if (!window.location.pathname.startsWith('/channels/')) return;
setTimeout( () => {
const chat = document.querySelector('main[class^=chatContent] div[class^=scroller_]');
const jump = document.querySelector('div[class^=jumpToPresentBar_] > button');
jump && jump.click() || chat && chat.scrollTo(0, chat.scrollHeight)
}, 100);
});