@dimyasvariant

コード内のconsoleを全て無効化する方法【JavaScript】

コード内のconsoleを全て無効化する方法【JavaScript】

解説は後で付けます

Chromeでしか試してません

remove_console.js

let remove_console_flag=true;//フラグ
let save_console={};//console機能回復用


function remove_console(){

  const all_num=Object.keys(window.console).length;//window.consoleのObjectの総数

  if(Object.keys(save_console).length){
    window.console=Object.assign({},save_console);
    save_console={};
  }


  if(remove_console_flag){
    save_console=Object.assign({},window.console);//consoleのオブジェクトをコピー
    for(let i=0;i<all_num;i++){//window.consoleの総数分繰り返す
        let change=String(window.console[Object.keys(window.console)[i]]);//log,trace,count...を取得
        change=(change.replace('function ', ''));//function log() { [native code] }になるのでlogだけになるように置き換える
        change=(change.replace('() { [native code] }', ''));//上に同じく
        window.console[change] = function(s){return;};//空の値を返す変数を上書き
    }
    console.log('表示されない');
    console.count('表示されない');
    console.trace('表示されない');
  }
}

function reset_console(){//consoleをもとに戻す
  remove_console_flag=false;
  remove_console();

}

remove_console();

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
    dimyasvariant

    コメント

    Firefoxでは変化がありませんでした。

    0

    こんな感じで大丈夫かと。

    <button onclick='consoleDisable()'>disable</button>
    <button onclick='consoleEnable()'>enable</button>
    <button onclick='console.log(Date.now()); console.dir(console)'>TEST</button>
    
    <script>
    'use strict';
    const consoleBak = {};
    
    function consoleDisable() {
      for(let f in console) {
        if(typeof console[f] !== 'function' || consoleBak[f] !== undefined) continue;
        consoleBak[f] = console[f];
        console[f] = function(){};
      }
    }
    
    function consoleEnable() {
      for(let f in consoleBak) {
        console[f] = consoleBak[f];
        delete consoleBak[f];
      }
    }
    </script>
    

    Chrome、Firefox、Safari、IE11で動作確認

    0
    あなたもコメントしてみませんか :)
    ユーザー登録
    すでにアカウントを持っている方はログイン
    記事投稿イベント開催中
    開発環境を豊かにする開発事例
    ~
    DirectCloud-BOX のAPI連携により広がるファイル共有・活用の可能性 - 開発~利用までの期間短縮、業務の効率化を実現しよう!
    ~
    0