Pregunta

Tengo un javascript que se apaga y obtiene un javascript " class " en otra página xhtml. El Javascript remoto se parece a lo siguiente:

    (function() {
        this.init = function() {
            jQuery("#__BALLOONS__tabs").tabs();
        };
    })

Después de recuperar esto en this.javascript, trato de evaluarlo y crear una instancia:

   this.javascript = eval("(" + this.javascript + ")");
   this.javascript = new this.javascript();
   this.javascript.init();

Por supuesto, esto funciona perfectamente en todos los navegadores, excepto IE. En IE, falla en la línea de evaluación. ¿Alguien tiene sugerencias sobre cómo puedo hacer que esto funcione en IE o una alternativa.

Gracias, Pete

¿Fue útil?

Solución

¿Has probado:

eval("this.javascript = (" + this.javascript + ")");

...?

Otros consejos

Esto funcionó con buenos navegadores y malos (lo que significa, por ejemplo):

var code_evaled;
function eval_global(codetoeval) {
    if (window.execScript)
        window.execScript('code_evaled = ' + '(' + codetoeval + ')',''); // execScript doesn’t return anything
    else
        code_evaled = eval(codetoeval);
    return code_evaled;
}

Disfruta

(eval no es un método de objeto en IE). ¿Entonces lo que hay que hacer? La respuesta es que puedes usar un método patentado de IE window.execScript para evaluar el código.

function loadMyFuncModule(var stufftoeval) {
  var dj_global = this; // global scope reference
  if (window.execScript) {

    window.execScript("(" + stufftoeval + ")");

    return null; // execScript doesn’t return anything
  }
  return dj_global.eval ? dj_global.eval(stufftoeval) : eval(stufftoeval);
}

Si lo peor realmente llega a ser peor, algo como esto puede funcionar:

var self = this;
funcid = "callback" + Math.random();
window[funcid] = function(javascript) {
  delete window[funcid];
  self.javascript = javascript;
  self.javascript = new self.javascript();
  self.javascript.init();
}
document.write("<script language='javascript'>" +
               "window." + funcid + "(" +
                 "(" + this.javascript + "));" +
               "</script>");

Tuve el mismo problema de eval () con IE, y la función con " window.execScript " No funcionó para mí. La solución que encontré para obtener matrices en javascript de una página (php en mi caso), fue usar algunos JSON.

// myfeed.php

return json_encode($myarray);

// myjs.js

$.getJSON('myfeed.php',function(data){dataAlreadyEvaled = data;});

Esto no necesita la función eval (), si ayuda a alguien ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top