Frage

Ich habe einige Javascript, die aus und holt sich auf einer anderen Seite xhtml ein Javascript „Klasse“ geht. Die Fern Javascript sieht etwa wie folgt aus:

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

Danach wird geholt in this.javascript, ich versuche, es zu Evaluierungs- und instanziiert:

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

Natürlich, das perfekt funktioniert in allen Browsern außer IE. In IE, scheitert es an der eval Linie. Hat jemand Vorschläge, wie ich diese Arbeit in IE machen oder eine Alternative.

Danke, Pete

War es hilfreich?

Lösung

Haben Sie versucht:

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

...

Andere Tipps

Das funktionierte mit guten Browsern und schlechten (was bedeutet, das heißt):

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

Genießen

(eval ist kein Objekt Methode in IE). Also, was zu tun? Die Antwort stellt sich heraus, dass Sie eine proprietäre IE Methode window.execScript zu eval-Code verwenden können.

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

Wenn Schlimmste wirklich am Mann ist, so etwas wie dies funktionieren kann:

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

Ich hatte das gleiche Problem von eval () mit IE, und der Funktion mit „window.execScript“ nicht für mich gearbeitet. Die Lösung fand ich Arrays in Javascript bekommen von einer Seite (php in meinem Fall), war einige JSON zu verwenden.

// myfeed.php

return json_encode($myarray);

// myjs.js

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

Dies muss keine Funktion eval (), wenn es jemand hilft ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top