1

私は、別のxhtmlページでjavascript「クラス」を取得して取得する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

これは、良いブラウザーと悪いブラウザー (つまり) で機能しました。

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 に答える
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 に答える