2

我有一个网站,在检查浏览器兼容性的代码中存在一个众所周知的错误。这是有问题的代码:

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

此代码导致 Internet Explorer 9 失败,因为 Jscript 引擎版本是 9.0。虽然从逻辑上讲,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>

然后你可以覆盖现有的ScriptEngineMajorVersionScriptEngineMinorVersion功能。像这样:

<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 回答