Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/08/2007, 14:23
Avatar de MaBoRaK
MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
HOWTO: Ejecutar javascript que viene de ajax

loading.....................

En vista de que muchos aun se preguntan como interpretar javascript que viene con ajax

Cita:
Texto que tiene javascript
<script>
alert("aqui mismo");
</script>
y mas
Si reciben eso y lo pegan en un Div o cualquier otro elemento, el javascript que tiene dentro no se ejecutará

Código PHP:
        myDiv.innerHTML=ajax.responseText
Bueno..... todo eso ya es conocido.

Manos a la obra
interpretadorAjax.js
Código PHP:
        var tagScript '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
        
/**
        * Eval script fragment
        * @return String
        */
        
String.prototype.evalScript = function()
        {
                return (
this.match(new RegExp(tagScript'img')) || []).evalScript();
        };
        
/**
        * strip script fragment
        * @return String
        */
        
String.prototype.stripScript = function()
        {
                return 
this.replace(new RegExp(tagScript'img'), '');
        };
        
/**
        * extract script fragment
        * @return String
        */
        
String.prototype.extractScript = function()
        {
                var 
matchAll = new RegExp(tagScript'img');
                return (
this.match(matchAll) || []);
        };
        
/**
        * Eval scripts
        * @return String
        */
        
Array.prototype.evalScript = function(extracted)
        {
                var 
s=this.map(function(sr){
                         var 
sc=(sr.match(new RegExp(tagScript'im')) || [''''])[1];
                         if(
window.execScript){
                              
window.execScript(sc);
                         }
                        else
                       {
                           
window.setTimeout(sc,0);
                        }
                });
                return 
true;
        };
        
/**
        * Map array elements
        * @param {Function} fun
        * @return Function
        */
        
Array.prototype.map = function(fun)
        {
                if(
typeof fun!=="function"){return false;}
                var 
0this.length;
                for(
i=0;i<l;i++)
                {
                        
fun(this[i]);
                }
                return 
true;
        }; 
Forma de uso:
  1. Incluir el archivo interpretadorAjax.js en su Header.
  2. Interpretando.
    1. Interprete normal
      Código:
      Texto blabla
      <script type='text/javscript'>alert('algo');</script>
      Otro texto blabla
      
      Código PHP:
              var scs=myAjax.responseText.extractScript();    //capturamos los scripts
              
      myDivUoTroLugar.innerHTML=myAjax.responseText.stripScript();    //eliminamos los scripts... ya son innecesarios
              
      scs.evalScript();       //ahora si, comenzamos a interpretar todo 
    2. Ahora bien, para interpretar archivos javascript
      Código:
      <script type='text/javascript'>alert('algo');</script>
      Texto blabla
      <script type='text/javascript' src="algo.js"></script>
      Otro texto blabla
      
      Se debe hacer.

      Código PHP:
              var scs=myAjax.responseText.extractScript();    //capturamos los scripts
              
      myDivUoTroLugar.innerHTML=myAjax.responseText
              scs
      .evalScript();       //ahora si, comenzamos a interpretar todo 
En teoría es mejor usar la opción b.

Espero les sirva y es similar al eval de prototype pero yo lo pensé antes...



connection closed.
__________________

Maborak Technologies

Última edición por MaBoRaK; 04/04/2008 a las 12:51 Razón: IE no interpretaba de forma global