2010-12-02 5 views
2

Grâce à this answer, j'ai pu exécuter javascript en étant chargé via un appel ExtJS AJAX.Pourquoi javascript eval fonctionnerait-il en chrome, safari, mais dans firefox seulement quand firebug est activé?

Cependant, le code suivant ne fonctionne pas le même dans tous les navigateurs (sur Mac):

  • chrome: travaux, alerte pops up
  • safari: travaux, alerte apparaît
  • Firefox: travaux, mais seulement quand Firebug est activé, quand Firebug est pas activé, le script est ignoré

Comment puis-je obtenir javasc ript à exécuter via l'appel AJAX dans Firefox sans Firebug installé?

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]); 
       } 
      } 
     }); 

    }); 
}); 

La base qui est en cours de chargement:

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

Répondre

1

console.log est votre coupable.

Chaque fois que vous vous connectez en JavaScript, il est une bonne idée de vérifier si la console existe avant d'appeler c'est des fonctions:

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

De cette façon, il n'exécutera lorsque la console est disponible.

3
console.log(responseText); 

cette ligne semble problématique pour moi. console n'existe que lorsque Firebug est activé, vous devrez donc le commenter ou vérifier s'il existe avant de l'utiliser.

+0

oublié que c'était là :-), et utile de savoir qu'il provoque des problèmes dans firefox, merci –

0

Vous ne savez pas si la suppression de console.log a corrigé cela pour vous, mais veuillez consulter mon other answer concernant la configuration loadScripts également.

Questions connexes