Вход в консоль JavaScript Magento
У меня есть пользовательские phtml-страницы в Magento. Насколько я знаю, Magento использует библиотеки jQuery и прототипов.
Например, если мне нужен внешний jQuery/jQueryUI, мне нужно использовать .noConflict()
Но если я хочу использовать
console.log('Hello world');
В консоли Chrome 15 я не получил ответа, ничего. Также попробовал Firebug.
Очевидно, что существует некоторый конфликт с кодом JavaScript Magento. Есть ли какое-либо решение?
Ответы
Ответ 1
Итак, в свете того, что я не хочу намазать этот сайт ненормативной лексикой, я просто скажу, что кто-то не думал в команде пурпурного, или каким-то образом какой-то дерьмовый код попал в живые релизы....
Если ваш console.log()
не работает над установкой Magento, вероятно, из-за следующего:
В magento/js/varien/js.js
@line ~ 636, Magento ver. 1.6.2.0
if (!("console" in window) || !("firebug" in console))
{
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
Это эффективно предотвращает работу console.log()
в любом браузере, кроме firefox с firebug.
Чтобы защитить IE, конечно, но я думаю, что это неправильный способ получить arround, вместо этого люди должны знать, что они делают с их протоколированием, и сталкиваются с последствиями, когда они этого не делают.
Чтобы исправить это, просто убедитесь, что вы положили delete window['console'];
(javascript), прежде чем пытаться выполнить console.log()
, или если вы не возражаете против изменения основных файлов, удалите приведенный выше код.
Обратите внимание: удалите исправление консоли для производства, удаление не работает в IE6-8 и выдает ошибку
Ответ 2
Добавление этого обновления макета в app/design/frontend/default/default/layout/local.xml
или тему app/design/frontend/default/default/layout/page.xml
в дескрипторе <default>
- это самый чистый и самый прямой способ добавить обратно консольный объект во все браузеры на всех страницах.
<default>
<reference name="content">
<block type="core/text" name="fix.console" as="fix.console">
<action method="setText">
<text><![CDATA[<script type="text/javascript">
iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.getElementsByTagName('body')[0].appendChild(iframe);
window.console = iframe.contentWindow.console;
console.firebug = "faketrue";
</script>]]></text>
</action>
</block>
</reference>
</default>
Ответ 3
В файле js.js есть этот код:
if (!("console" in window) || !("firebug" in console))
{
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
Итак, что он на самом деле делает, если консоль не является консолью firebug (в firefox), она деактивирует ее. Так что во встроенной консоли google chrome она не работает.
Существует 2 варианта: используйте firefox с firebug или удалите этот блок кода.
Ответ 4
Это быстрое решение.
jQuery(document).ready(function(){
window.console = jQuery('<iframe>').hide().appendTo('body')[0].contentWindow.console;
});
Источник: http://updownleftright.net/blog/2011/09/javascript-tip-of-the-day-restoring-console-log-on-a-magento-site
Ответ 5
Почему бы не проверить, сначала ли определен объект консоли?
Вместо:
if (!("console" in window) || !("firebug" in console))
Вы можете написать:
if( typeof console === 'undefined' )
Ответ 6
Все, что вам нужно сделать, прежде чем консоль регистрировать в первый раз на странице.
delete window['console'];
Ответ 7
После сообщения AlexB я использовал эту работу.
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if (!("console" in window) || !("firebug" in console) && !is_chrome)
{
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
Как вы можете видеть, is_chrome var возвращает true или false, добавив: is_chrome останавливает выполнение кода.
Ответ 8
Использование console.log()
в браузерах с использованием Firebug 1.9.0+ с Magento до 1.6.2.0 завершится неудачно, потому что Magento проверяет свойство console.firebug
, но это свойство было удален с Firebug 1.9.0 в целях конфиденциальности.
Смотрите файл js/varien/js.js
:
if (!("console" in window) || !("firebug" in console))
{
// :
}
Так как Magento 1.7.0.0 все это условие закомментировано, чтобы исправить эту (и другую) проблему (ы).
Ответ 9
Это больше не проблема с последней версией ядра Mage. Код, который разбивает console.log()
, закомментирован. Я точно не знаю, в какой версии он был исправлен, но он исправлен с CE 1.7.0.2.