如何让Rails将JavaScript错误发送到日志而不是警报?

4

JavaScript错误信息弹出警告框简直伤透了我的心。有没有一种方法可以将其发送到console.log()而不是alert()


对于rjs,请尝试使用http://maintainable.com/software/firebug_rjs_errors(当嵌入时,链接似乎无法正常工作) - tliff
4个回答

4
您可以覆盖 window.alert 方法:
var oldAlert = window.alert; // reference to the original window.alert

window.alert = function(message) { 
  if (window.console && console.log) { 
    console.log(message); 
  } else { 
    oldAlert(message); // if console.log doesn't exist call window alert
  } 
} 

2
那个方法可以行得通,但在我看来有点粗暴。不过仍然是一个好的解决方案,所以点赞+1。 - marcgg
现在的解决方案是可以的!但是我真的想探索下面的插件——以防我需要在应用程序中使用警报(虽然我从不这样做,我认为几乎任何形式的弹出窗口都是亵渎的)。 - Ryan Florence
如果在链接中使用:confirm参数,它还将使用警报。 - tliff
在JS中,confirm和alert是不同的,尽管它们都是具有激动性的。 - Ryan Florence

0
你可以尝试在 environment.rb 文件中关闭 RJS 调试:
``` config.action_view.debug_rjs = false ```
这样应该会完全关闭警告。另一个选择是覆盖 `ActionView::Helpers::GeneratorMethods#to_s` 方法:
module ActionView
  module Helpers
    module GeneratorMethods
      def to_s #:nodoc:
        returning javascript = @lines * $/ do
          if ActionView::Base.debug_rjs
            source = javascript.dup
            javascript.replace "try {\n#{source}\n} catch (e) "
            javascript << "{ console.log('RJS error:\\n\\n' + e.toString()); console.log('#{source.gsub('\\','\0\0').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }}'); throw e }"
          end
        end
      end
    end
  end
end

我承认在覆盖方法方面,我已经超出了自己的能力范围,而且我不知道这是否是一种推荐的做法。在我的项目中,我还没有需要做类似于这样的事情。

我的个人偏好是跳过RJS并采用不显眼的jQuery。


不确定原型是如何更加突兀的……但无论如何,我想试试原型/Scriptaculous。我做的大部分工作都很xhr重,所以我想“让它与JS保持在同一家族中”,而不是单独搞JS。我自己是一个MooTools爱好者,已经可以看到自己想要使用它了。 - Ryan Florence
我相信你可以使用原型来实现不显眼的效果,但这意味着你需要放弃使用许多辅助工具。据我所知,我喜欢编写和控制我的JS,这样它才能为我所用。 - Andy Gaskell

0

是的,console.log("这里放错误信息")


我认为他指的是RJS生成的警报;) - tliff
是的,Rails自己做了很多事情,我想我应该添加rjs标签。 - Ryan Florence

0

这取决于Javascript错误。由于JavaScript是由客户端解释的,因此您需要在客户端显示错误消息。如果错误发生在Javascript被客户端解释之前的服务器端,则记录错误到服务器日志文件的唯一真正方法是。


你说得完全正确,但console.log是JavaScript函数用于浏览器调试工具(如WebKit的检查器、Firebug和IE8的新功能),我正在尝试使用它而不是Rails默认的alert()。 - Ryan Florence

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