1

我有一些 javascript 出去并在另一个 xhtml 页面上获取一个 javascript“类”。远程 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 或替代方案中进行这项工作有任何建议。

谢谢,皮特

4

5 回答 5

2

这适用于好的浏览器和坏的浏览器(这意味着 ie):

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

享受

于 2010-02-01T16:42:46.283 回答
1

(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);
}
于 2009-06-26T19:43:36.240 回答
1

你有没有尝试过:

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

...?

于 2009-06-26T20:22:03.883 回答
0

如果最坏的情况真的发生了,这样的事情可能会奏效:

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>");
于 2009-06-29T02:17:06.440 回答
0

我在 IE 中遇到了同样的 eval() 问题,并且带有“window.execScript”的函数对我不起作用。我发现从页面(在我的情况下为 php)获取 javascript 数组的解决方案是使用一些 JSON。

// myfeed.php

return json_encode($myarray);

// myjs.js

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

这不需要 eval() 函数,如果它可以帮助任何人......

于 2012-01-09T19:11:58.587 回答