仅在调试模式下执行JS代码

6

当我打开开发者工具时,是否可以仅执行JS文件的一部分?

我想要像这样的东西:

#if DEBUG
executeMethodOnlyInDebugger();
#endif

但是针对JavaScript。

1
你可以在代码中设置自己的标志,需要调试时只需切换值即可。 - MinusFour
4
这是一个重复的问题:https://dev59.com/LXLYa4cB1Zd3GeqPZZN-。 - Saar
3
这样会很好,但你永远无法依赖所有浏览器都做同样的事情。最好手动设置标志。 - user1106925
1
那个重复的问题是特定于Chrome浏览器的(现在已经过时了)。我认为原帖作者想知道是否有一些标准化的方法。 - user1106925
5个回答

2

2
我认为条件编译在这里并不相关。如果他想要根据开发工具的状态来运行(或不运行)代码,那将是一个运行时的工作。他基本上在寻找一个标准布尔标志。 - user1106925
1
@squint,所贴代码类似于C#的预处理器指令,这是一种条件编译形式。条件是“开发工具是否打开”有点不相关。 - Jamiec
我猜这取决于上下文。他没有明确地与任何特定的事情联系起来,但我理解你的观点。我无法确定他是否希望在打开工具时激活它。 - user1106925

2

1
尝试使用这个库:https://github.com/sindresorhus/devtools-detect 它会检查window对象并在检测到控制台已打开时发出事件。我可能会谨慎地将其包含在生产代码中,但在您的用例中,它可能是一个有用的调试工具。

也许以前可以用,但现在肯定不行了(在Chrome上或者在Firefox内置调试器上)。这个问题表明它对Firebug也不可靠。请参考此问题 - T.J. Crowder
@T.J.Crowder 在Chrome 45和Safari 9中对我有效:http://sindresorhus.com/devtools-detect/编辑:刚刚将Chrome更新到46,它仍然有效。 - Alastair
在我的火狐浏览器上可以运行,但是如预期的那样无法检测到未停靠的开发工具。 - Jamiec
无论如何,我同意其他帖子的观点,最健壮的方法是设置自己的调试标志(您甚至可以通过查询字符串或哈希片段之类的方式方便地控制它)。 - Alastair
2
在Chrome上对我有效,结果发现只有当开发工具停靠时才有效(所以与Firefox的错误相似)。Firefox也是如此。总之:不可靠,不应使用。 - T.J. Crowder

1

我认为在Chrome和Firefox中没有办法检查这个。 最好的方法是在你的代码中设置一个调试标志。

虽然当开发者工具未打开时,IE会将控制台显示为undefined。 所以对于IE,你可以这样做:

if(console){
  //dev tools is open
} else{
  //dev tools not open
}

在这里查看更多关于Chrome的信息: 了解Chrome控制台是否已打开


1

针对 ASP.NET

在 _Layout.cshtml(MVC)或 Master(Web Forms)中添加以下内容:

<script>
    @if (HttpContext.Current.IsDebuggingEnabled)
    {
    @:var DEBUG = true;
    }
    else
    {
    @:var DEBUG = false;
    }
    alert('DEBUG: ' + DEBUG);
</script>

这个优点在于你可以通过Web.config中的配置值打开或关闭它,以允许在任何环境中进行调试。
<system.web>
    <compilation debug="false" />
</system.web>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接