我的代码中有一个众所周知的错误网站,用于检查浏览器的兼容性。这是令人讨厌的代码:
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),但我需要一种更自动化的方法。
任何帮助都将不胜感激。
答案 0 :(得分: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>
但显然这取决于你是否可以在定义和使用之间注入你的代码。