Question

J'ai du javascript qui sort et récupère un javascript " class " sur une autre page xhtml. Le code javascript distant ressemble à peu près à ce qui suit:

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

Une fois que cela est récupéré dans this.javascript, j'essaie de l'évaluer et de l'instancier:

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

Bien sûr, cela fonctionne parfaitement dans tous les navigateurs sauf IE. Dans IE, cela échoue à la ligne d'évaluation. Quelqu'un at-il des suggestions sur la façon dont je peux faire en sorte que cela fonctionne dans IE ou une alternative?

Merci, Pete

Était-ce utile?

La solution

Avez-vous essayé:

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

...?

Autres conseils

Cela a fonctionné avec les bons navigateurs et les mauvais (ce qui signifie par exemple):

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

Profitez

(eval n'est pas une méthode d'objet dans IE). Alors que faire? La réponse s’avère être que vous pouvez utiliser une méthode propriétaire d’IET window.execScript pour évaluer le code.

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 le pire venait vraiment à se dégrader, cela pourrait marcher:

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

J'ai eu le même problème de eval () avec IE et de la fonction avec & "window.execScript &"; n'a pas fonctionné pour moi. La solution que j’ai trouvée pour obtenir des tableaux en javascript à partir d’une page (php dans mon cas) consistait à utiliser du JSON.

// myfeed.php

return json_encode($myarray);

// myjs.js

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

Ceci n’a pas besoin de la fonction eval (), si cela peut aider quelqu'un ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top