Okada Hiroshi の blog

typo が多いです

Twitter の自動更新ブックマークレット

今日は小ネタを

Twitter の自動更新 ブックマークレット (Bookmarklet) です。ツイッターの Web ページの 「新しいツイート○件を見る」 が表示されていたらクリックして、広告は非表示にします。

下のボタンっぽいリンクをブックマークバーにドラッグするか、右クリックで「名前をつけてリンク先を保存」で保存してください。(Google Chrome 用です。)

🐦自動読込

  • スクロールして過去のツイートを見ているときは自動更新しません。
  • ブックマークレットをクリックする毎に自動更新 ON/OFF が切り替わります。
  • 自動読み込み中は鳥アイコンの周りに点線が表示されます。
  • 広告は非表示にしているだけで、内部的には読み込んでいます。

ソースコード

(() => {
  // タイマー呼び出しが定義済みならキャンセルして終了
  if (window.autoReloadId) {
    clearInterval(window.autoReloadId);
    delete window.autoReloadId;
    // 自動読み込み中であることを示すため表示した点線を削除
    document.querySelector('h1').style.outline = "";
    return;
  }
  
  // 後で参照するために一番上のツィートの id を保存
  let topItemIdSave = document.querySelector("li.stream-item").id;

  // 広告を隠す
  const hideAd = () =>
    Array.from(
      document.querySelectorAll("a.js-promoted-badge"),
      e =>
        (e.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display =
          "none")
    );
  hideAd();

  window.autoReloadId = setInterval(() => {
    // スクロール中ならば何もしない(ほんの少しだけならスクロー中でない事にする)
    if (document.scrollingElement.scrollTop > 15) {
      return;
    }
    const topItemId = document.querySelector("li.stream-item").id;
    if (topItemIdSave === topItemIdSave) {
      // 「新しいツイートをn件を見る」が表示されていたらクリックする
      const e = document.querySelector(".new-tweets-bar");
      e && e.click();
    } else {
      topItemIdSave = topItemId;
      hideAd();
    }
  }, 200);
  
  // 自動読み込み中であることを示すためh1(鳥アイコン)の周りに点線を表示
  document.querySelector('h1').style.outline = "dotted 1px #00f";
})();

URL

javascript:(()=%3E%7Bif(window.autoReloadId)return%20clearInterval(window.autoReloadId),delete%20window.autoReloadId,void(document.querySelector(%22h1%22).style.outline=%22%22);let%20e=document.querySelector(%22li.stream-item%22).id;const%20t=()=%3EArray.from(document.querySelectorAll(%22a.js-promoted-badge%22),e=%3Ee.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display=%22none%22);t(),window.autoReloadId=setInterval(()=%3E%7Bif(document.scrollingElement.scrollTop%3E15)return;const%20o=document.querySelector(%22li.stream-item%22).id;if(e==e)%7Bconst%20e=document.querySelector(%22.new-tweets-bar%22);e&&e.click()%7Delse%20e=o,t()%7D,200),document.querySelector(%22h1%22).style.outline=%22dotted%201px%20#00f%22%7D)();

同様の機能をもった機能拡張もありますが、機能拡張用よりはブックマークレットのほうが安全性は高いし、起動していないときの負荷も少ないです。