ホームページ  >  記事  >  ウェブフロントエンド  >  eval が function_javascript スキルに遭遇したときの IE の処理

eval が function_javascript スキルに遭遇したときの IE の処理

WBOY
WBOYオリジナル
2016-05-16 18:03:291268ブラウズ

ケース 1: eval に関数がないため、直接実行します:
eval("alert('ss');");//すべてのブラウザは
を正しく出力します ケース 2: eval に関数があり、関数はすぐに実行されます:
eval("(function(){alert('ss');})();");//すべてのブラウザは正しく出力します
ケース 3: eval に関数があります、変数を使用して関数参照を保存し、この関数を呼び出します:
var f=eval("(function(){alert('ss');})"); IE でレポート: オブジェクトが見つかりません。他のブラウザは正常です
eval で関数を定義し、それを変数に返すと、IE はエラー: オブジェクトが見つかりません をレポートします。 IE の eval で定義された関数が eval の外部に正常に返せないことがわかります。

解決策: 関数オブジェクトを実行結果として返します:

方法 1:

var f=eval("(function(){ return function(){alert ( 'ss');}})()");
f();//すべてのブラウザは、すぐに実行される関数を呼び出すための
eval を正しく出力します。関数が実行された後、関数オブジェクトが返されます。 . これは、関数オブジェクトの参照が外部変数に正常に返された場合です。

方法 2:

var f=eval("(false||function(){alert('ss');})");
f();//すべてのブラウザは
を正常に出力します。このメソッドは jquery でも使用されており、この関数は or 式の実行結果として返されます。これにより、問題も正常に解決されます。もちろん、式は上記の false||function(){} に限定されません。関数:

/* および式: */
を正常に返すことができる限り、さまざまな式が問題を解決できます。 var f=eval("(true&&function(){alert('ss');})");
f();//すべてのブラウザは正常に出力します

/* 三項式 :*/
var f=eval("(true?function(){alert('ss');}:'');");
f();//すべてのブラウザは正常に出力します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。