JavaScript консольный логин Magento - PullRequest
14 голосов
/ 10 ноября 2011

У меня есть собственные страницы phtml в Magento. Насколько я знаю, Magento использует библиотеки jQuery и прототипов.

Например , если мне нужен внешний jQuery / jQueryUI, мне нужно использовать .noConflict()

Но если я хочу использовать

console.log('Hello world');

В консоли Chrome 15 я не получил ответа, ничего. Также пробовал с Firebug.

Очевидно, что существует некоторый конфликт с JavaScript-кодом Magento. Есть ли решение?

Ответы [ 9 ]

45 голосов
/ 19 марта 2012

Так что в свете нежелания портить этот сайт ненормативной лексикой, я просто скажу, что кто-то не думал об этом в команде magento или каким-то дерьмовым кодом попал в живые релизы ....

Если ваш console.log() не работает с установкой Magento, это вероятно из-за следующего:

In 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, но я думаю, что это неправильный способ обойти это, вместо этого люди должны знать, что они делают со своей регистрацией, и сталкиваться с последствиями, когда они этого не делают.

Чтобы исправить это, просто убедитесь, что вы поставили delete window['console']; (javascript), прежде чем пытаться выполнить console.log(), или, если вы не возражаете против изменения основных файлов, удалите приведенный выше код.

Обратите внимание: удалите исправление консоли для производства, удаление не работает в IE6-8 и выдает ошибку

3 голосов
/ 14 февраля 2012

Добавление этого обновления макета в 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>
2 голосов
/ 22 февраля 2014

Все, что вам нужно сделать, прежде чем консольный вход в систему в первый раз на странице.

 delete window['console'];
2 голосов
/ 01 мая 2012

Почему бы не проверить, определен ли сначала объект Console?

Вместо:

if (!("console" in window) || !("firebug" in console))

Вы можете написать:

if( typeof console === 'undefined' )
2 голосов
/ 09 февраля 2012

Это быстрое решение.

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

2 голосов
/ 02 декабря 2011

В файле 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 или удалить этот блок кода.

1 голос
/ 28 января 2013

Это больше не проблема последней версии в ядре Mage. Код, который ломает console.log(), закомментирован. Я не уверен точно, в какой версии это было исправлено, но это исправлено с CE 1.7.0.2.

1 голос
/ 19 сентября 2012

Использование 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, все это условие закомментировано, чтобы исправить эту (и другие) проблему (и).

1 голос
/ 04 января 2012

После публикации в 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 останавливает выполнение кода.

...