Ошибки JavaScript в окне предупреждения травмируют мою душу. Есть ли способ отправить его на console.log()
вместо alert()
?
Как я могу заставить рельсы отправлять в журнал ошибки javascript, а не оповещения?
Ответы (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
}
}
Да, console.log("error message goes here")
Это зависит от ошибки Javascript. Поскольку JavaScript интерпретируется клиентом, вам нужно будет отображать сообщения об ошибках на стороне клиента. Единственный реальный способ записать ошибки в файл журнала сервера - это если ошибка происходит на стороне сервера до того, как Javascript будет интерпретирован клиентом.
Вы можете попробовать отключить отладку RJS в вашем файле environment.rb:
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.