2009-06-26 5 views
1

J'ai un javascript qui sort et récupère une "classe" javascript sur une autre page xhtml. Le javascript distant ressemble à quelque chose comme ce qui suit:Comment puis-je obtenir cet appel eval() pour travailler dans IE?

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

Après cela est tiré par les cheveux dans this.javascript, je tente de eval et 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 C'EST À DIRE. Dans IE, il échoue à la ligne d'évaluation. Est-ce que quelqu'un a des suggestions sur la façon dont je peux faire ce travail dans IE ou une alternative.

Merci, Pete

+1

Vous n'avez pas besoin de 'eval' pour ça. Ou l'ai-je mal compris? – nyuszika7h

Répondre

1

Avez-vous essayé:

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

...?

+0

Eh bien, il n'y a pas d'évaluation dans IE. J'ai essayé ceci avec window.execScript, cependant, mais cela ne fonctionne malheureusement pas. – slypete

+0

Il n'y a pas d'évaluation dans IE!?!? Bien sûr qu'il y en a!Eval est déconseillé, mais fait partie de la spécification JS/EcmaScript, et a été dans IE depuis IE3 (JScript version 1): http://msdn.microsoft.com/en-us/library/2z6exc9e.aspx –

+0

Vous devez être faire autre chose de mal d'avoir la perception que l'évaluation n'est pas disponible. –

1

(eval ne constitue pas une méthode objet dans IE). Alors que faire? La réponse s'avère être que vous pouvez utiliser une méthode IE exclusive 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); 
} 
+0

Merci, mais j'ai déjà essayé cela. Selon les docs de Microsoft, cette méthode retourne toujours null. http://msdn.microsoft.com/en-us/library/ms536420(VS.85).aspx – slypete

+0

Oui, mais vous pouvez y accéder dans la portée globale indépendamment (voir mon edit) – Janie

+0

Quand je dis l'accès "it" je fais référence à l'objet que vous avez créé en l'évangélisant. – Janie

0

Si le pire arrive vraiment au pire, quelque chose comme cela peut fonctionner:

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

Cela a fonctionné avec de bons navigateurs et 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

0

J'ai eu le même problème de eval() avec IE, et 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), était d'utiliser du JSON.

// myfeed.php

return json_encode($myarray); 

// myjs.js

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

Cela n'a pas besoin fonction eval(), si elle aide à tout le monde ...

Questions connexes