タブが「ツイートが投稿されました」で埋め尽くされる現象
ありませんか?
YouTubeでボーカロイド曲(公式でアップロードされた奴)とかをTwitterでシェアしまくって、タイムラインを荒らすと、私自身のタブも荒らされますよね。サイトによっては新しいウィンドウで表示されて自動で閉じてくれるのもありますが、閉じてくれないのもあります。
そんなときに思ったのが、自動で閉じてくれたら便利じゃね?ということで作ってみました。
成果物
chrome ウェブストアで公開していますのでよろしくお願いします。
ソースコードなどの軽い説明
ファイル構成はこんな感じです。
- manifest.json
- background.js
- icon.png
とてもシンプルです。
manifest.json
{
"manifest_version": 2,
"name": "Twitter共有後自動でタブ閉じるやぁーつ",
"short_name": "TweetAutoClose",
"description": "ブログやサイトなどに置かれているTwitterの共有ボタンから記事などを共有後の「ツイートが投稿されました」のページを自動で閉じる拡張機能です。",
"version": "1.0.2",
"icons": {
"128": "icon.png"
},
"background": {
"scripts": [
"background.js"
],
"persistent": false
},
"permissions": [
"tabs"
]
}
常に実行するJSを登録してます。
これですが、TwitterのURLのみ実行するJSを登録してそっちでタブを閉じる処理にしても良い気がしてきました。
というかむしろその方が良いでしょう。
background.js
chrome.tabs.onUpdated.addListener(function (tabId, changeinfo, tab) {
if (~tab.url.indexOf("https://twitter.com/intent/tweet/complete")) {
if (changeinfo.status === "complete") {
chrome.tabs.remove(tabId);
}
}
});
毎回タブの更新を受け取るListenerです。このListenerで読み込み終了したタブがhttps://twitter.com/intent/tweet/complete
だった場合タブを閉じるという感じです。
シンプルですが、まだ改善の余地がありそうです。
さいごに
ひとまずこれでTwitterでシェアをするのが楽になったので良かったと思います。
まだまだ、改善の余地がありますが良い機会でした。
こちらもよろしくです。
2020/06/01 追記
Twitterの仕様が変わったので上記の方法では、うまく動かなくなりました。
let urlhistory;
chrome.tabs.onUpdated.addListener(function (tabId, changeinfo, tab) {
if (changeinfo.status === "complete") {
if (~tab.url.indexOf("https://twitter.com/")) {
if (urlhistory.indexOf("https://twitter.com/intent/tweet") === 0) {
chrome.tabs.remove(tabId);
}
}
urlhistory = tab.url;
}
});
なかなか良い方法が思いつかなかったため、とりあえず変数に投稿画面移行前のURLを記憶させておき、https://twitter.com/intent/tweet
からツイート後にhttps://twitter.com/
へリダイレクトされたら、タブを閉じるようにしてみました。リファラーから判断するのも考えましたが、なかなかうまくいかなかったため、このような強引な形になってしまいました。
※この方法、投稿画面開いてすぐ投稿しないと機能しないことに気づいた。気が向いたら治します。