iOS版MarinDeckのスクロールバグを直す

2023.04.05

最近、Twitterのサードパーティークライアントが続々使用不可能となってから、たびたび代替として挙がるMarinDeck
粗削りな部分は多々ありますが、それでも本家より何倍も使いやすいと感じています。

そんなMarinDeckのiOS版には、ある致命的なバグがあります。
それは、「スクロール中にスクロール場所が飛ぶ」というものです。40件ほどさかのぼるとすぐ発生するので、少しでも多くさかのぼろうとすると、見られないツイートが出てしまいます。

しかし、これは厳密にはMarinDeckのバグではなく、Webkitのバグだと考えられています(その証拠に、大元のウェブ版TweetDeckでも発生します)。

解決策

では、解決策はないのでしょうか?幸いなことに、MarinDeckにはカスタムJSを読み込める機能がありますから、それを使いましょう。
今回は、このコードを使います。
この下に、コピー用のコードを設けたので、コピーしてMarinDeckのカスタムJS(設定にあります、CSSではありません)に貼り付けてください。

コピー用コード(元のコードはMITライセンスです)
(function() {
'use strict';
function f() {
var increaseChirpSizes = function (column) {

column.UPWARD_SCROLL_CHIRP_BLOCK_SIZE = 1000; // default: 40
column.INFINITE_SCROLL_CHIRP_BLOCK_SIZE = 40; // default: 20
column.TARGET_COLUMN_CHIRP_LIMIT = 1000; // default: 40
};

var createColumn = window.TD.controller.columnManager.createColumn;
window.TD.controller.columnManager.createColumn = function(e, t) {
var column = createColumn(e, t);
try {
increaseChirpSizes(column);
return column;
} catch (err) {
console.error(err, column);
return column;
}
};

var columns = window.TD.controller.columnManager._aColumnIndex;
for (var index in columns) {
increaseChirpSizes(columns[index]);
}
}

(function g() {
if (window.TD && window.TD.ready) {
f();
} else {
setTimeout(g, 100);
}
})();

})();

// TweetDeck__Triple the amount of loaded tweets
// Copyright (c) 2018 pejuta (https://openuserjs.org/users/pejuta)
// Released under the MIT license
// https://opensource.org/licenses/mit-license.php
// Customized by mmahhi (http://mmahhi.s203.xrea.com/)

ちなみに元のコードとは、17~19行目が以下のように変わっています。上のコピー用コードはすでに変えてあるので、書き換えは不要です。
column.UPWARD_SCROLL_CHIRP_BLOCK_SIZE = 1000; // default: 40
column.INFINITE_SCROLL_CHIRP_BLOCK_SIZE = 40; // default: 20
column.TARGET_COLUMN_CHIRP_LIMIT = 1000; // default: 40

これでスクロールバグが発生しなくなっているはずです。皆さん、よいTwitter・MarinDeckライフをお過ごしください。

なぜこれで直るのか

おそらくですが、TweetDeckはスクロールするときに新しいツイートを読み込むと、その前に表示したものが消えるようになっています。そのタイミングの問題で、Webkitのみが自分のスクロール位置を見失っているのではないかと思います。
そこで、その処理を1000件読み込んだ時までさせないようにすることで、事実上消す処理を無効にし、バグを発生させなくしています。

補足として40件と指定されたコード2行目は、一度に読み込んで描写するツイートの数のようです。ツイートはどんな場合でも40件ずつ読み込まれるようなので、最大限読み込むようにしてあります。

最後に、私の記事が役に立ったという方は、Twitterのフォロー、よろしくお願いします!

関連記事

- CafeLog -