/*************************************************************************/ /* userChrome.js */ /* */ /* LastUpdate 2026.06.17 by @PseudoTwDk */ /* */ /* https://ss1.xrea.com/coltpythonkingcobra.g1.xrea.com/pseudoTweetdeck/ */ /* http://coltpythonkingcobra.g1.xrea.com/pseudoTweetdeck/ */ /*************************************************************************/ /* タブの横ダブルクリックで最大化を抑止 */ setTimeout( function(){ var elm = document.getElementById("navigator-toolbox"); if( elm !== null ){ elm.addEventListener("dblclick", function(e){ if(e.button==0){ e.stopPropagation(); e.preventDefault(); } }, false); } }, 500 ); /* aboutDialogページでESCを無効にする */ (function() { window.addEventListener("keydown", function(event) { //chrome://browser/content/aboutDialog.xhtmlが対象のはずだが内部的にはbrowser.xhtmlになっている if(location.href.indexOf("chrome://browser/content/browser.xhtml") < 0) return true; // ESCキー (keyCode 27) が押されたかチェック if (event.keyCode === 27) { event.preventDefault(); //デフォルト動作(閉じる)を停止 event.stopPropagation(); //イベントの伝播を停止 return false; } }, true); })(); /* Firefox,Waterfox,Floorp,LibreWolfにてバージョン情報ダイアログを設定画面の上部に埋め込む(一般でのみ表示) */ (function() { // about:preferences ページが読み込まれたときの処理 window.addEventListener("DOMContentLoaded", function(event) { var document = event.target; // ページが設定ページであるか確認 if(document.location.href.indexOf("about:preferences") < 0) return; var elms = document.querySelectorAll("vbox.pane-container"); if(! elms.length){ //window.alert("ERROR1"); return; } const ovservDiv = document.getElementById('mainPrefPane'); if(! ovservDiv){ //window.alert("ERROR2"); return; } var targetDiv = document.getElementById('generalCategory'); var targets; if(! targetDiv ){ targets = document.querySelectorAll('setting-pane[data-category="paneAbout"]'); if( targets.length ){ targetDiv = targets[0]; } } var msgPane = elms[0]; if(msgPane){ const FW = "750px"; const FH = "500px"; var iframe = document.createElement("iframe"); iframe.id = "embedded-about-dialog"; iframe.src = "chrome://browser/content/aboutDialog.xhtml"; iframe.style.width = FW; iframe.style.height = FH; iframe.style.minWidth = FW; iframe.style.minHeight = FH; iframe.style.maxWidth = FW; iframe.style.maxHeight = FH; iframe.style.border = "none"; iframe.style.marginTop = "3px"; iframe.style.marginBottom = "20px"; if(! targetDiv || targetDiv.getAttribute('hidden') !== null){ iframe.setAttribute('hidden',""); }else{ iframe.removeAttribute('hidden'); } // 設定ページに追加 msgPane.insertBefore(iframe, msgPane.firstChild); }else{ //window.alert("ERROR3"); return; } // 変更を監視するオブザーバーの作成 const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.attributeName === 'hidden') { var targetDiv = document.getElementById('generalCategory'); var targets; if(! targetDiv ){ var targets = document.querySelectorAll('setting-pane[data-category="paneAbout"]'); if( targets.length ){ targetDiv = targets[0]; } } if(! targetDiv || targetDiv.getAttribute('hidden') !== null){ iframe.setAttribute('hidden',""); }else{ iframe.removeAttribute('hidden'); } } }); }); // 監視を開始 observer.observe(ovservDiv, { attributes: true, childList: true, subtree: true }); }); })(); /* LibreWolfにてバージョン情報ダイアログを設定画面「LibreWolfからのご案内」に埋め込む */ /* (function() { // about:preferences ページが読み込まれたときの処理 window.addEventListener("DOMContentLoaded", function(event) { var document = event.target; // ページが設定ページであるか確認 if(document.location.href !== "about:preferences#moreFromMozilla") return; // LibreWolfでだけ表示する var ttlPane = document.getElementById("category-librewolf"); if(! ttlPane) return; var msgPane = document.getElementById("moreFromMozillaCategory"); if(msgPane){ var iframe = document.createElement("iframe"); iframe.id = "embedded-about-dialog"; iframe.src = "chrome://browser/content/aboutDialog.xhtml"; iframe.style.width = "100%"; iframe.style.height = "330px"; iframe.style.border = "none"; iframe.style.marginTop = "20px"; // 設定ページに追加 msgPane.appendChild(iframe); } }); })(); */ /* 端末へ送る対象をソート 同期設定画面にて 「PC名(ブラウザ名)」を設定している前提 */ (function(){ //コンテキストメニューが開かれた時の処理 document.addEventListener("popupshowing", function(e){ switch(e.target.id){ case "context_sendTabToDevicePopupMenu": //端末へ送信メニュー(タブの右クリック) case "context-sendlinktodevice-popup": //リンクを端末へ送信メニュー(リンクの右クリック) case "context-sendpagetodevice-popup": //ページを端末へ送信メニュー(表示中ページ余白の右クリック) break; default: //それ以外は無視 return; } var sendToDeviceSubmenu = document.getElementById(e.target.id); if(!sendToDeviceSubmenu) return; //端末リストのDOM要素を配列に変換 var devices = Array.from(sendToDeviceSubmenu.querySelectorAll("menuitem")); var rec_len = devices.length; if( rec_len < 1 ) return; //セパレータ(createElementで新規に作るとESRで動作が違うので既存のセパレータからcloneNodeでコピーする) var sepOrg = Array.from(sendToDeviceSubmenu.querySelectorAll("menuseparator")); var sepTag; if( sepOrg.length > 0 ){ sepTag = sepOrg[0]; } //名前(label)でアルファベット順(辞書順)にソート devices.sort((a, b) => { var nameA = a.getAttribute("label").trim(); var nameB = b.getAttribute("label").trim(); //特定の単語順に並ぶように比較文字列を置換 nameA = nameA.replace("Firefox ESR","0"); nameA = nameA.replace("Firefox Release","1"); nameA = nameA.replace("Firefox Beta","2"); nameA = nameA.replace("Firefox Aurora","3"); nameA = nameA.replace("Firefox Nightly","4"); nameA = nameA.replace("Waterfox","5"); nameA = nameA.replace("Floorp","6"); nameA = nameA.replace("LibreWolf","7"); nameB = nameB.replace("Firefox ESR","0"); nameB = nameB.replace("Firefox Release","1"); nameB = nameB.replace("Firefox Beta","2"); nameB = nameB.replace("Firefox Aurora","3"); nameB = nameB.replace("Firefox Nightly","4"); nameB = nameB.replace("Waterfox","5"); nameB = nameB.replace("Floorp","6"); nameB = nameB.replace("LibreWolf","7"); if (nameA < nameB) return -1; if (nameA > nameB) return 1; return 0; }); //ソートした順に要素を再配置 var idx = 0, name, newname, lastname = "", nn, ln; devices.forEach(device => { if( idx <= rec_len - 3 ){ name = device.getAttribute("label").trim(); //括弧より前がPC名なのでPC名が変わったらセパレータを挟む ln = lastname.split("("); nn = name.split("("); if( idx && ln.length > 1 && nn.length > 1 && ln[0] != nn[0] ){ var sep = sepTag.cloneNode(true); sendToDeviceSubmenu.appendChild(sep); } lastname = name; //視認性を良くするために通番を付番し余白追加 newname = "[" + ("00" + (idx+1)).slice(-3) + "] " + name; newname = newname.replaceAll("("," ( "); newname = newname.replaceAll(")"," ) "); //端末一覧の名称を置換 device.setAttribute("label", newname); const lbl = device.querySelectorAll("label"); for( var i=0; i { seprec.remove(); }); }, false); })(); /* 5ch.netから5ch.ioへ自動転送.uc.js https://egg.5ch.io/test/read.cgi/software/1741415944/731 https://u6.getuploader.com/script/download/2343 */ (() => { "use strict"; const reg_5ch = /(?:^|\.)5ch\.net$/; const observe = (subject) => { const httpChannel = subject.QueryInterface(Ci.nsIHttpChannel); reg_5ch.test(httpChannel.URI.host) && httpChannel.redirectTo(Services.io.newURI(httpChannel.URI.spec.replace("5ch.net", "5ch.io"))); }; Services.obs.addObserver(observe, "http-on-modify-request", false); window.addEventListener("unload", () => Services.obs.removeObserver(observe, "http-on-modify-request"), { once: true }); })();