Почему javascript eval работает в chrome, safari, но в firefox только при включенной firebug? - PullRequest
2 голосов
/ 02 декабря 2010

Благодаря этому ответу Мне удалось заставить javascript выполняться при загрузке через вызов ExtJS AJAX.

Однако следующий код не работает одинаково во всех браузерах (на Mac):

  • chrome: работает, всплывающее предупреждение
  • safari: работает, всплывающее предупреждение
  • firefox: работает, но только при Firebugвключен , когда Firebug не включен, скрипт игнорируется

Как я могу заставить javascript выполняться через вызов AJAX в Firefox без установленного Firebug?

Ext.onReady(function(){

    var menuItemStart = new Ext.Panel({
        id: 'panelStart',
        title: 'Start',
        html: 'This is the start menu item.',
        cls:'menuItem'
    });

    var menuItemApplication = new Ext.Panel({
        id: 'panelApplication',
        title: 'Application',
        html: 'this is the application page',
        cls:'menuItem'
    });

    var regionMenu = new Ext.Panel({
        region:'west',
        split:true,
        width: 210,
        layout:'accordion',
        layoutConfig:{
            animate:true
        },
        items: [ menuItemStart, menuItemApplication ]
    });

    var regionContent = new Ext.Panel({
        id: 'contentArea',
        region: 'center',
        padding:'10',
        autoScroll: true,
        html: 'this is the content'
    });

    new Ext.Viewport({
        layout: 'border',
        items: [ regionMenu, regionContent ]
    });

    menuItemStart.header.on('click', function() {
        Ext.Ajax.request({
            url: 'content/view_start.php',
            success: function(objServerResponse) {
                regionContent.update(objServerResponse.responseText);
            }
        });
    });

    menuItemApplication.header.on('click', function() {             
        Ext.Ajax.request({
            url: 'content/view_application.php',
            success: function(objServerResponse) {
                var responseText = objServerResponse.responseText;
                console.log(responseText);
                regionContent.update(responseText);
                var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
                while(scripts=scriptsFinder.exec(responseText)) {
                    eval(scripts[1]);
                }
            }
        });

    });
});

Загружаемая база:

<script type="text/javascript">
    alert('inside application view');
</script>
<?php
echo 'this is the application view at ' . date('Y-m-d h:i:s');
?>

Ответы [ 3 ]

3 голосов
/ 02 декабря 2010
console.log(responseText);

эта строка мне кажется проблематичной.console существует только при включенном Firebug, поэтому вам придется прокомментировать его или проверить, существует ли он перед использованием.

1 голос
/ 02 декабря 2010

console.log является вашим виновником.

Всякий раз, когда вы входите в JavaScript, неплохо проверить, существует ли консоль, прежде чем вызывать ее функции:

if(window.console) console.log('whatever');

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

0 голосов
/ 02 декабря 2010

Не уверен, что удаление console.log исправило это для вас, но, пожалуйста, смотрите мой другой ответ относительно конфигурации loadScripts.

...