Twitter - Auto Refresh List Page

Twitter - Auto Refresh List Page.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Twitter - Auto Refresh List Page
// @description  Twitter - Auto Refresh List Page.
// @version      0.1
// @author       to
// @namespace    https://github.com/to
// @license      MIT
//
// @match        https://twitter.com/i/lists/*
// @match        https://twitter.com/search*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=twitter.com
//
// @grant        unsafeWindow
// ==/UserScript==

const TOP_RANGE = 300;
const REFRESH_INTERVAL = 10 * 1000;

var onFrame;
var scrollEvent;

addBefore(unsafeWindow, 'requestAnimationFrame', (callback) => {
	onFrame = callback;
});

window.addEventListener("scroll", (event) => {
	scrollEvent = event;
}, false);

document.addEventListener("visibilitychange", (event) => {
	if(!document.hidden)
        refresh();
}, false);

setInterval(refresh, REFRESH_INTERVAL);

function refresh(){
    // ページの途中まで スクロールされている場合 返る
	if(window.scrollY > TOP_RANGE)
        return;

    // 下方向に疑似的にスクロールする
    // 実際に発生したイベントをコピーしたものを再利用する
    // 疑似的な再描画も発生させる
	window.scrollTo(window.scrollX, 1000);
	document.dispatchEvent(scrollEvent || new Event('scroll'));
	onFrame();

	window.scrollTo(window.scrollX, 0);
}

function addBefore(target, name, before) {
	var original = target[name];
	target[name] = function() {
		before.apply(target, arguments);
		return original.apply(target, arguments);
	}
}