如何绕过Jscript版本检查?

时间:2012-12-17 17:11:19

标签: javascript jquery internet-explorer jscript

我的代码中有一个众所周知的错误网站,用于检查浏览器的兼容性。这是令人讨厌的代码:

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),但我需要一种更自动化的方法。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分: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>

但显然这取决于你是否可以在定义和使用之间注入你的代码。