2

ブラウザーの互換性をチェックするコードによく知られたバグがある Web サイトを持っています。これは問題のあるコードです:

strScriptEngineVer = ScriptEngineMajorVersion() + '.' + ScriptEngineMinorVersion();
if (ScriptEngineMajorVersion() < 5 || ScriptEngineMinorVersion() < 5)
{
    AddTestResultRow('ScriptEngine',
    'Error',
    'Script Engine', // TRANS: msgScriptEngine
    strScriptEngineVer,
    // TRANS: msgScriptEngineWrongVersion
    'Your version of MS Script Engine is not sufficient, Centricity Enterprise Web will not function correctly.');
    // TRANS: msgErrorCannotGoOn
    ShowStopMessage('There is an error, Centricity Enterprise Web cannot go on.');
    return false;
}

Jscript エンジンのバージョンが 9.0 であるため、このコードによって Internet Explorer 9 が失敗します。論理的には、9.0 は 5.8 (IE 8) よりも大きいですが、「マイナー バージョン」が 0 として報告され、0 が 5 未満であるため、上記のコードは失敗します。別の Jscript バージョンを報告するか、壊れたコードを置き換える JavaScript コードを挿入して確認してください。後者は IE の開発者モード ( https://braininstitute.mch.com/wiki/Centricity_Enterprise_Webを参照) 内で実行できることはわかっていますが、より自動化されたアプローチが必要です。

どんな助けでも大歓迎です。

4

1 に答える 1

0

ScriptEngineMinorVersion定義されている場所と比較して、このコードが実行される場所に正確に依存します。しかし、それが次のようなものである場合:

<!-- ScriptEngineMajorVersion and ScriptEngineMinorVersion 
     are defined in tools.js //-->
<script src="tools.js"></script>
<script>
  if (ScriptEngineMajorVersion() < 5 || ScriptEngineMinorVersion() < 5)
  {
    /// ...
  }
</script>

ScriptEngineMajorVersion次に、既存の関数と関数をオーバーライドできますScriptEngineMinorVersion。そのようです:

<script src="tools.js"></script>
<script>
  function ScriptEngineMajorVersion(){
     return Infinity;
  }
  function ScriptEngineMinorVersion(){
     return Infinity;
  }
</script>
<script>
  if (ScriptEngineMajorVersion() < 5 || ScriptEngineMinorVersion() < 5)
  {
    /// ...
  }
</script>

しかし、明らかに、定義と使用の間にコードを挿入できるかどうかにかかっています。

于 2012-12-17T17:16:15.583 に答える