我的代码中有大量的console.log,但我只需要看到它们/打开它们,如果我需要在站点上看到它们,所以我想要一种方法,能够通过设置几个片段在浏览器控制台中启用/取消它们,例如:adysis.debug(‘Enable’),adysis.debug(‘Disable’),但我如何才能让它们触发Console.Logs在代码中,我目前根本没有关于如何做的线索?

推荐答案

要禁用控制台的所有方法,请使用Proxy.

在浏览器控制台中使用console.enabled = true/false禁用/启用控制台. 禁用状态保留在本地存储中.因此,页面重新加载后情况是一样的.

(删除try/catch,因为这里不允许这样做).

{
  const key = 'console-enabled';
  
  let enabled;
  try{
  enabled = localStorage.getItem(key);
  }catch(_){}
  
  window.console = new Proxy(window.console, {
    get(console, prop){
      if(prop === 'enabled'){
        return disabled;
      }
      if(!enabled && typeof console[prop] === 'function' && Object.hasOwn(console, prop)){
        return function(){}
      }
      return Reflect.get(...arguments);
    },
    set(console, prop, val){
      if(prop === 'enabled'){
        enabled = val;
        try{
          enabled ? localStorage.setItem(key, val) : localStorage.removeItem(key);
        }catch(_){}
        return true;
      }
      return Reflect.set(...arguments);
    }
  });
}


console.log('disabled');
console.dir(document.body);

$pre.textContent = 'console.log is enumerable: ' + console.propertyIsEnumerable('log');

console.enabled = true;

console.log('enabled');
console.dir(document.body);
<pre id="$pre"></pre>

Javascript相关问答推荐

使脚本兼容于其他YouTube URL格式

如何将特定的字符串类型转换为TypScript中的字符串?

回归函数不会迭代到foreach中的下一个元素

在卡信息之间切换

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

如何分配类型脚本中具有不同/额外参数的函数类型

格式值未保存在redux持久切片中

在nextjs服务器端api调用中传递认证凭证

分层树视图

Regex结果包含额外的match/group,只带一个返回

为什么useState触发具有相同值的呈现

如何使用子字符串在数组中搜索重复项

这个值总是返回未定义的-Reaction

查询参数未在我的Next.js应用路由接口中定义

使用getBorbingClientRect()更改绝对元素位置

在数组中查找重叠对象并仅返回那些重叠对象

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

将基元传递给THEN处理程序

Next.js无法从外部本地主机获取图像

本地损坏的Java脚本