Как я могу заставить этот вызов eval () работать в IE? - PullRequest
1 голос
/ 26 июня 2009

У меня есть какой-то javascript, который выходит и выбирает javascript "класс" на другой странице xhtml. Удаленный JavaScript выглядит примерно так:

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

После того, как это извлечено в this.javascript, я пытаюсь оценить его и создать экземпляр:

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

Конечно, это прекрасно работает во всех браузерах, кроме IE. В IE это терпит неудачу в строке eval. У кого-нибудь есть предложения о том, как я могу заставить это работать в IE или альтернативе.

Спасибо, Пит

Ответы [ 5 ]

2 голосов
/ 01 февраля 2010

Это работало с хорошими браузерами и плохими (что означает то есть):

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

Наслаждайтесь

1 голос
/ 27 июня 2009

Вы пробовали:

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

...

1 голос
/ 26 июня 2009

(eval не является объектным методом в IE). Так что делать? Ответ оказывается, что вы можете использовать собственный метод IE window.execScript для оценки кода.

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 голосов
/ 09 января 2012

У меня была та же проблема eval () с IE, и функция с "window.execScript" не работала для меня. Решение, которое я нашел для получения массивов в javascript со страницы (в моем случае php), заключалось в использовании некоторого JSON.

// myfeed.php

return json_encode($myarray);

// myjs.js

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

Для этого не нужна функция eval (), если она кому-нибудь поможет ...

0 голосов
/ 29 июня 2009

Если худшее действительно становится худшим, может сработать что-то подобное:

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