2012-01-12 16 views
1

私はjsio(jslibs-http://code.google.com/p/jslibs/wiki/jsio)を使用していて、Safariのバグに遭遇しています。 予期しないトークン '='Safari上のJSバグ:予期せぬトークン '='

問題はコードのこの部分にあります。

this.debugPath = function(path) { return path; } 

// IE6 won't return an anonymous function from eval, so use the function constructor instead 
var rawEval = (typeof eval('(function(){})') == 'undefined') 
      ? function(src, path) { return (new Function('return ' + src))(); } 
      : function(src, path) { var src = src + '\n//@ sourceURL=' + path; return window.eval(src); }; 

// provide an eval with reasonable debugging 
this.eval = function(code, path, origCode) { 
...................... 

rawEvalが割り当てられている行に問題があるようです。それをコメントアウトすると、エラーは他の場所に移動しました。誰もこの問題を以前に遭遇しましたか?

ヘルプ?

ありがとうございました。

+0

'function(src、path){var src = src ...}'はバグかもしれません。 'src'を使ってローカル変数を宣言していますが、ローカル変数ではありません。同じ名前の仮パラメータを上書きするだけです。 –

+0

Btw、 'new Function(...)'はグローバルスコープ内でバインドしますが、ES3では 'window.eval'は呼び出しスコープ内でバインドされるため、これら2つは同等ではありません。 IE6の評価問題を回避する1つの方法は、評価している式テキストに文字列 '' 0 ''を付加することです。 –

+0

@MikeSamuel:あなたは次のことを意味しますか?試してみましたが動作しませんでした。 ' \t' return eval( "0、" + src + '\ n // @ sourceURL =' + path); '};' – Navneet

答えて

0

誰か(私を含む)がこの問題に再び遭遇した場合、これは将来参照するためのものです。

私の場合、Safariがスローするエラーは偽りであるか、あまりにもあいまいです。

私は自分のライブラリの1つにクラスを定義しました。そして、私はそのクラスのオブジェクトへのハンドル/参照を保存したくありませんでした。だから、私は次のようにしました:

function reply(...) { 
    new ClassName(.....).onHide = bind(...); 
    .......... 
} 

私は次のように変更しました。

function reply(...) { 
    var dg = new ClassName(......); 
    dg.onHide = bind(...); 
    .............. 
} 

新しいオブジェクトを宣言し、そのメンバープロパティ(または関数)の1つを定義することは問題になります。

関連する問題