Domanda

Ho un po 'di javascript che esce e recupera un javascript " class " su un'altra pagina xhtml. Il javascript remoto è simile al seguente:

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

Dopo che questo è stato recuperato in this.javascript, provo a valutarlo e creare un'istanza:

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

Ovviamente, questo funziona perfettamente in tutti i browser tranne IE. In IE, fallisce sulla linea di valutazione. Qualcuno ha suggerimenti su come posso farlo funzionare in IE o in alternativa.

Grazie, Pete

È stato utile?

Soluzione

Hai provato:

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

...

Altri suggerimenti

Funzionava con browser buoni e cattivi (il che significa che):

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

Godetevi

(eval non è un metodo oggetto in IE). Quindi che si fa? La risposta è che puoi usare un metodo IE proprietario window.execScript per valutare il codice.

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 il peggio arriva davvero al peggio, qualcosa del genere potrebbe funzionare:

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

Ho avuto lo stesso problema di eval () con IE e la funzione con " window.execScript " non ha funzionato per me. La soluzione che ho trovato per ottenere array in javascript da una pagina (php nel mio caso), era usare un po 'di JSON.

// myfeed.php

return json_encode($myarray);

// myjs.js

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

Questo non ha bisogno della funzione eval (), se aiuta qualcuno ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top