Javascript:为啥有时 alert() 不起作用但 console.log() 起作用?

Posted

技术标签:

【中文标题】Javascript:为啥有时 alert() 不起作用但 console.log() 起作用?【英文标题】:Javascript: Why sometimes alert() does not work but console.log() does?Javascript:为什么有时 alert() 不起作用但 console.log() 起作用? 【发布时间】:2014-02-12 04:26:18 【问题描述】:

有时,我会遇到一个非常有趣的错误。我的 javascript 代码在执行期间不显示警报(msg),但如果我使用 console.log(msg),它确实会显示在控制台中。什么会阻止 alert() 显示?

非常感谢

【问题讨论】:

能把js代码展示一下吗? 您能否提供一个 SSCCE 来说明问题? 发生在你的所有代码上? 我有类似的问题。在我的情况下,网络浏览器(chrome)阻止了警报窗口,因为它们经常显示 不知道是不是和你的问题有关,不过看看here 【参考方案1】:

这是一个非常普遍的问题,每个人都至少遇到过一次这个问题。 alert() 不起作用的原因是因为之前您已选中“防止此页面创建额外的对话框”复选框。

让我们看看这段代码。

<script type="text/javascript">

var js_name = ['elem1', 'elem2']

 for (var i = 0; i < js_name.length; i++) 
    alert(js_name[i]);
 ;

</script>

如果您运行代码,将会有两个警告框。如果您选中“防止此页面创建其他对话框”复选框,然后再次刷新页面,您将不会再收到警告框。

解决方案是您需要关闭该网页并在浏览器中重新打开(不需要关闭整个浏览器)。 我假设您使用的是 chrome。 Internet Explorer 或 FireFox 没有此复选框功能。

【讨论】:

【参考方案2】:

如果你覆盖警报功能,它就不会工作

alert = function() 

 ...
;

alert('hello') // won't show any alert

【讨论】:

奇怪的是:它发生在项目中间,例如在回调中,但不在主代码中......可能与范围和函数覆盖确实有关......【参考方案3】:

据我所知,alert() 始终会显示,除非它是重复的,在这种情况下会询问您是否要继续显示警报。

我想如何处理的具体细节取决于您的浏览器。愿意分享更多细节吗? :)

【讨论】:

这是我的想法,但有时警报不显示。我无法理解它,而且我没有具体的例子,它总是处于一个巨大的项目中间......【参考方案4】:

这也发生在 ColdFusion 中。如果您在脚本标记后的任何位置使用 cflocation 标记(而不是 location.href),则不会显示警报。

【讨论】:

【参考方案5】:

如果您打开了开发工具并启用了响应式设计模式,这也可能在 Firefox 中发生。听起来像it's a bug。

【讨论】:

漏洞还在【参考方案6】:

在 Firefox 中:转到选项 -> 内容并取消选中“阻止弹出窗口”复选框。重启浏览器。

【讨论】:

【参考方案7】:

浏览器可能忽略alertconfirmprompt 的另一个原因是,如果文档位于iframe 中,该sandbox 属性的值中没有allow-modals .

例如,Firefox 会默默地忽略这一点,但 Chromium 会显示警告。

【讨论】:

【参考方案8】:

如果您尝试在 Chrome 浏览器地址 URL 中执行 javascript 警报功能,如果该选项卡之前没有加载任何页面,您将不会收到消息。 仅当它不是新标签时,您才会收到警报框。 如果存在之前加载的网页,然后您尝试在地址栏中运行 javascript,您将得到预期的结果。 希望它能澄清这种在 Chrome 中难以检测的行为。

【讨论】:

【参考方案9】:

我在这里遇到了类似的问题,当我将控制台日志替换为“警报”时,它不起作用,但 console.log 确实有效。

不工作的代码是:

request(options, function(error, response, body)  // Requesting API

    var statusCode = response.statusCode;

    if(statusCode === 200)
      alert("Success");
     else 
      alert(error);
    

工作代码是:

request(options, function(error, response, body)  // Requesting API

    var statusCode = response.statusCode;

    if(statusCode === 200)
      console.log("Success");
     else 
      console.log(error);
    

【讨论】:

以上是关于Javascript:为啥有时 alert() 不起作用但 console.log() 起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 JavaScript 中的 Math.pow()(有时)不等于 **?

JavaScript 的 new date() 和 date() 为啥输出不一样?

js 为啥有时加载有时不加载

为啥/如何将 `value="javascript:alert(1)"` 视为 OWASP 的 ZAP 工具中的 XSS 漏洞?

javascript,innerHTML或者innerText获取的内容是否字符串?为啥和另外一个字符串相比结果不对

javascript进行重定向页面时用window.href.location为啥有时不传参数?