滚动到 Facebook 消息的顶部

Scroll to top of facebook messages

我可以执行一些 JavaScript 代码来滚动到 Facebook 消息框的顶部吗?因此,当您单击 'see all' 并转到主消息页面时,如果您向上滚动它会加载更多消息。我想强制它继续向上滚动以继续加载消息。我试过了

document.body.scrollTop = document.documentElement.scrollTop = 0;

但这当然只会滚动到实际页面的顶部。关于如何向上滚动消息框有什么想法吗?

Select 对话并尝试此脚本(通过控制台加载):

var autoLoad = {

    messagesContainer: document.querySelector('#contentArea [role=main] .uiScrollableAreaContent'),

    start: function (speed) {
        var messagesContainer = this.messagesContainer,
            loadMore = document.querySelector('[role=log] .pam.uiBoxLightblue.uiMorePagerPrimary');
        speed = parseInt(speed, 10) || 1000;
        clearInterval(this.interval);
        this.interval = setInterval(function () {
            messagesContainer.style.top = '0px';
            loadMore.click();
        }, speed);
    },

    stop: function () {
        clearInterval(this.interval);
        this.messagesContainer.style.top = '';
    }

};

要启动它,请键入:

// Takes a 'speed' parameter, defaults to 1000 milliseconds
autoLoad.start(1200);

并停止它(滚动条重新出现所必需):

autoLoad.stop();

解释:

在探索了 Facebook 的 DOM 之后,我发现了一些选择器专门针对 需要的元素来实现:

  • 消息容器,它保存消息
  • 'load more'link,触发 facebook 负责加载更多消息的脚本。

消息容器可滚动区域不使用本机滚动,而是使用 bottomtop 设置其当前滚动位置。

所以,如果你想滚动到顶部,你将容器设置为top: '0',因为这样,消息自动加载AJAX只触发一次,你需要触发每次滚动到顶部后手动。我设法通过在触发 AJAX.

的 link 中执行 click 来做到这一点

我试图获得我能找到的最具体的 classes/selectors,以及听起来更笼统的那些,因为我不知道 Facebook 是否以某种方式动态生成 ids/classes。

我在 Firefox 和 Chrome 下对此进行了测试,稍微研究一下代码并对其进行更改以满足您的需要。我希望这对您有用,否则,您可以使用 DOM 资源管理器找到合适的选择器。

我不得不调整脚本以使用 "scrollTop" 而不是 "style.top"。

var autoLoad = {

messagesContainer: document.querySelector('#globalContainer [role=main] .uiScrollableAreaContent'),

start: function (speed) {
    var messagesContainer = this.messagesContainer,
        loadMore = document.querySelector('#js_d');
    speed = parseInt(speed, 10) || 1000;
    clearInterval(this.interval);
    this.interval = setInterval(function () {
        messagesContainer.scrollTop = 0;
        loadMore.scrollTop = 0;
        /* loadMore.click(); */
    }, speed);
},

stop: function () {
    clearInterval(this.interval);
    this.messagesContainer.style.top = '';
}

};

2021 年 11 月 @user4698813 代码更新:

var autoLoad = {
    messagesContainer: document.querySelector('[role=main]'),

    start: function (speed) {
        var messagesContainer = this.messagesContainer,
            loadMore = document.querySelector('[data-release-focus-from]');
        speed = parseInt(speed, 10) || 1000;
        clearInterval(this.interval);
        this.interval = setInterval(function () {
            messagesContainer.scrollTop = 0;
            loadMore.scrollTop = 0;
            /* loadMore.click(); */
        }, speed);
    },

    stop: function () {
        clearInterval(this.interval);
        this.messagesContainer.style.top = '';
    }
};