Pergunta

Eu tenho alguns javascript que sai e vai buscar uma "classe" javascript em outra página xhtml. O javascript parece remota algo como o seguinte:

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

Após este é buscado em this.javascript, eu tento eval-lo e instanciar:

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

Claro, isso funciona perfeitamente em todos os navegadores, exceto IE. No IE, ele falha na linha de eval. Alguém tem sugestões sobre como eu posso fazer este trabalho no IE ou uma alternativa.

Obrigado, Pete

Foi útil?

Solução

Você tentou:

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

...?

Outras dicas

Isso funcionou com bons navegadores e os maus (o que significa IE):

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

Aproveite

(Eval não é um método de objeto no IE). Então o que fazer? A resposta acaba por ser que você pode usar um proprietárias IE método window.execScript ao código eval.

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

Se pior realmente vem a pior, algo como isso pode 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>");

Eu tive o mesmo problema de eval () com o IE, e a função com "window.execScript" não funcionou para mim. A solução que eu encontrei para obter matrizes em javascript a partir de uma página (php no meu caso), era usar alguns JSON.

// myfeed.php

return json_encode($myarray);

// myjs.js

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

Isso precisa nenhuma função eval (), se isso ajuda qualquer um ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top