「リブログ一覧」を自動的に全て開く  

「リブログ一覧」のリストは、一定以上の件数がある場合は「もっと見る」ボタンで、次の一群を呼び込む仕様です。 これは、画像の遅延読込みと同じで、システムに無駄な作業をさせない工夫と思われますが、全記事を開示するアレンジでは、このボタンを押すのがうとましく感じます。

 

 

そこで、この「もっと見る」ボタンをスクリプトで押させて、リストの最後まで自動で呼込む様にしました。

 

let target=document.querySelector('body'); // 監視 target
let monitor=new MutationObserver(rb_dialog);
monitor.observe(target, {childList: true, subtree: true}); // 監視開始

function rb_dialog(){
    let dialog=document.querySelector('._VTWWy72m');
    if(dialog){
        let more=document.querySelector('._2Sqhjike');
        if(more){
            monitor.disconnect();
            more.click();
            monitor.observe(target, {childList: true, subtree: true}); }}}

 

「リブログ一覧」のダイアログは、ページ上で表示・非表示の場合があります。 単純なスクリプトでは、ダイアログが非表示になった時点で「終わってしまう」ので、MutationObserverを使って、表示される度にスクリプトを再起動させています。

 

このスクリプト中で、「more」ボタンが無くなるまで「more」ボタンを押すというコードで、リストを最後まで呼込むのですが、MutationObserverがページの状態変化で動作するので、下手をすると自己発信(無限ループ)してしまいます。 後半の太字はそれを避ける安全策で、一時的にObserverを無効化しています。

 

 

 

「リブログ一覧」もブロックしました 

「リプログ一覧」のリストにも、コメント欄と同様にブロックフィルターをかける様にしました。「コメント欄」で登録された非表示指定のデータに該当するIDの「リブログ」があれば、一覧リスト上で非表示にします。

 

let modal_list_item=dialog.querySelectorAll('.modal-list__item');
if(modal_list_item.length!=0){
    for(let k=0; k<modal_list_item.length; k++){
        let page_href=modal_list_item[k].querySelector('.modal-entry').getAttribute('href');
        let user_href=page_href.split('/')[1];
        if(block_regex_id.test(user_href)==true){
            modal_list_item[k].style.display='none'; }}}

 

 

 

操作方法 

◎「コメント欄のタイトル部」がスイッチです。 非表示にしたいコメントがある場合に、このタイトル部を左クリックして「管理モード」をONにします。「管理モード」が起動すると、タイトル部が赤背景、リスト部がスクロール表示になります。

 

◎ 非表示にするコメントを左クリックすると、そのコメントに赤枠が表示されます。

これで、そのコメントのユーザーIDが登録されます。

 

◎「コメント欄のタイトル部」をもう一度左クリックすると、指定したIDのコメントは全て非表示になります。 

 

◎ 非表示を指定したIDの全コメント・リブログが非表示となり、アメブロの他のブログのコメント欄、リブログ一覧でも非表示になります。

(但し新タイプスキンのブログに限ります)

 

◎ 非表示に指定したコメントを再表示したい場合は、再度「管理モード」にします。「管理モード」では、非表示指定のコメントが赤枠付きで表示され、これを左クリックすると赤枠が消え、これで非表示指定が解除されます。

 

◎ また、「Tampermonkey」でこのスクリプトツールをOFFにすると、非表示指定したコメントは全て表示されます。

 

◎ このツールのブロック機能は、新タイプスキンのブログでのみ有効です。 旧タイプスキンのブログでは、ブロック機能が動作しません。 このツールは、本来スタッフブログを対象に開発したもので、ご容赦ください。

 

 

 

「Bad Comment Mute」ver. 0.3 

このツールは Chrome / 新Edge / Firefox の拡張機能「Tampermonkey」上で動作します。 以下のコードを「Tampermonkey」の「新規スクリプト」にコピー&ペーストして保存する事で、このツールを実行できます。

 

〔コピー方法〕 軽量シンプルなツール「PreBox Button   」を使うと

  コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」

  の操作で、掲載コードのコピーが可能になります。

 

 

〔 Bad Comment Mute 〕ver. 0.3

 

// ==UserScript==
// @name         Bad Comment Mute
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  特定ブログのコメント欄から不良な「コメント」を非表示にする
// @author       Ameba Blog User
// @match        https://ameblo.jp/*
// @run-at        document-start
// @grant        none
// ==/UserScript==

window.addEventListener('DOMContentLoaded', function(){
    let comm_block_data=[]; // 総合ブロックデータ
    let block_filter_id;
    let block_regex_id;

    let edit_mode=0;

    let read_json=localStorage.getItem('comm_id_back'); // ローカルストレージ 保存名
    comm_block_data=JSON.parse(read_json);
    if(comm_block_data==null){
        comm_block_data=['tmp_id'];
        let write_json=JSON.stringify(comm_block_data);
        localStorage.setItem('comm_id_back', write_json); } // ローカルストレージ 保存


    reg_set();

    function reg_set(){
        block_filter_id=comm_block_data.join('|');
        block_regex_id=RegExp(block_filter_id); }


    disp_environ();

    function disp_environ(){
        let css=
            '#reblogHeader h4, #commentsHeader h4 { padding: 3px 6px 0; } '+
            '#reblogHeader h4:before, #commentsHeader h4:before { content: "🟢 "; } '+
            '[data-uranus-component="commentsList"].is-collapsed > li { display: list-item; } '+
            '[data-uranus-component="commentsMore"] { display: none; } '+
            '[data-uranus-component="pagination"].is-hidden { display: block !important; } '+
            '._VTWWy72m { font-size: 14px; width: 820px; } '+
            '._3OVFjjnu { background: #cfd8dc; } '+
            '._2NO3-cCV { color: #000; } '+
            '._2y13PkI_ { color: red; } '+
            '._1H3aORVw { max-height: 75vh; } '+
            '._t1jBTIo6 { font-size: 14px; background: #f4f4f4; } '+
            '._t1jBTIo6 .modal-entry { text-decoration: none; } '+
            '._t1jBTIo6:hover { background-color: #fff; } '+
            '._t1jBTIo6 ._13k_m6Fs { color: #000; -webkit-line-clamp: unset; } '+
            '._3rXF4N-X { font-size: 16px; margin-bottom: 2px; } '+
            '._Rg5EvdMm { font-weight: bold; background: #cfd8dc; } '+
            '._1Eq2deCX { color: #000; }';

        let style=document.createElement('style');
        style.setAttribute('id', 'bc_mute');
        style.innerHTML=css;

        let target=document.querySelector('body');
        if(!target.querySelector('#bc_mute')){
            target.appendChild(style); }}



    let target=document.querySelector('body'); // 監視 target
    let monitor=new MutationObserver(main);
    monitor.observe(target, {childList: true, subtree: true}); // 監視開始

    function main(){
        comm_blocker();

        let commHeader=document.querySelector('#commentsHeader h4');
        if(commHeader){
            let commentsList=document.querySelector('#commentsList');
            commHeader.onclick=function(){
                if(edit_mode==0){
                    edit_mode=1;
                    commHeader.style.background='red';
                    if(commentsList){
                        commentsList.style.overflowX='hidden';
                        commentsList.style.height='70vh'; }
                    checker(); }
                else{
                    edit_mode=0;
                    commHeader.style.background='none';
                    if(commentsList){
                        commentsList.style.overflowX='visible';
                        commentsList.style.height='auto'; }}}}
    } // main()



    function comm_blocker(){
        let k;
        let user_li;
        let user_href;

        user_li=document.querySelectorAll('#commentsList li');
        if(user_li.length!=0){
            for(k=0; k<user_li.length; k++){ // コメントリストのマスク
                if(user_li[k].querySelector('[data-uranus-component="commentAuthor"] a')){
                    user_href=user_li[k].querySelector('[data-uranus-component="commentAuthor"] a').getAttribute('href');
                    user_href=user_href.replace(/\//g, '');
                    if(block_regex_id.test(user_href)==true){
                        if(edit_mode==0){
                            user_li[k].style.display='none';
                            user_li[k].style.outline='none'; }
                        else{
                            user_li[k].style.display='list-item';
                            user_li[k].style.outline='solid 2px red';
                            user_li[k].style.outlineOffset='-3px'; }}
                    else{
                        user_li[k].style.display='list-item';
                        user_li[k].style.outline='none'; }}}}
    } // comm_blocker()



    function checker(){
        let k;
        let user_li;
        let user_href=[];

        user_li=document.querySelectorAll('#commentsList li');
        if(user_li.length!=0){
            for(k=0; k<user_li.length; k++){
                let n=k;
                if(user_li[n].querySelector('[data-uranus-component="commentAuthor"] a')){
                    user_href[n]=user_li[n].querySelector('[data-uranus-component="commentAuthor"] a').getAttribute('href');
                    user_href[n]=user_href[n].replace(/\//g, '');
                    user_li[n].onclick=function(){ // リストのクリックで設定
                        local_backup(n); }}}

            function local_backup(n){
                if(edit_mode==1){
                    if(block_regex_id.test(user_href[n])!=true){
                        user_li[n].style.outline='solid 2px red';
                        user_li[n].style.outlineOffset='-3px';
                        comm_block_data.push(user_href[n]); }
                    else if(block_regex_id.test(user_href[n])==true){
                        user_li[n].style.outline='none';
                        comm_block_data.splice(comm_block_data.indexOf(user_href[n]), 1); }
                    reg_set();
                    let write_json=JSON.stringify(comm_block_data);
                    localStorage.setItem('comm_id_back', write_json); }}} // ローカルストレージ 保存
    } // checker()



    let monitor0=new MutationObserver(rb_dialog);
    monitor0.observe(target, {childList: true, subtree: true}); // 監視開始

    function rb_dialog(){
        let dialog=document.querySelector('._VTWWy72m');
        if(dialog){
            let more=document.querySelector('._2Sqhjike');
            if(more){
                monitor0.disconnect();
                more.click();
                monitor0.observe(target, {childList: true, subtree: true}); }

            let modal_list_item=dialog.querySelectorAll('.modal-list__item');
            if(modal_list_item.length!=0){
                for(let k=0; k<modal_list_item.length; k++){
                    let page_href=modal_list_item[k].querySelector('.modal-entry').getAttribute('href');
                    let user_href=page_href.split('/')[1];
                    if(block_regex_id.test(user_href)==true){
                        modal_list_item[k].style.display='none'; }}}}}

})

 

 

 

「Bad Comment Mute」最新版について 

旧いバージョンの JavaScriptツールは、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。

 

●「Bad Comment Mute」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。