Chakra是Microsoft打包到IE9中的更新Javascript引擎的代号。
可以将JScript用作ASP Classic页面的开发语言。它通常在Windows内置的JScript引擎上运行,自NT4 Option Pack(c.1996)以来,所有版本的Windows中都存在这种脚本。
问题是,可以将运行在Chakra引擎上的Javascript用于ASP吗?
最佳答案
显然不是。
我尝试了以下简单的示例脚本:
<%@ language="Javascript" %>
<script language="Javascript" runat="server" src='json2.js'></script>
<script language="Javascript" runat="server">
(function() {
scriptEngineInfo = function () {
var s = {
engine : ScriptEngine(),
version: {
major: ScriptEngineMajorVersion(),
minor:ScriptEngineMinorVersion()
},
build: ScriptEngineBuildVersion()
};
return s;
}
}());
var x = scriptEngineInfo();
x.Timestamp = (new Date()).valueOf();
Response.Write (JSON.stringify(x));
</script>
如上所述,当“ Javascript”是语言的名称时,我得到以下结果:
{
"engine": "JScript",
"version": {
"major": 5,
"minor": 8
},
"build": 16982,
"Timestamp": 1331866901948
}
当我按照this answer中的建议进行操作并将Chakra配置为命名脚本引擎时,将上述脚本中出现的三个“ Javascript”替换为“ Chakra”,然后运行“页面”,我得到了正确的预期结果:
{
"engine": "JScript",
"version": {
"major": 9,
"minor": 0
},
"build": 16441,
"Timestamp": 1331867213695
}
9的主要版本显示我正在使用Chakra。
但是,如果我随后重新请求相同的脚本,它将失败并显示500错误,提示:
无法执行已释放脚本中的代码
如果我再试一次,它会给我
外部对象中发生可捕获的错误(C0000005)。该脚本无法继续运行。
如果重试,则会得到:
ScriptEngine在'CActiveScriptEngine :: ReuseEngine()'的'IActiveScript :: GetScriptState()'中引发了异常'C0000005'。
对于此脚本,这在我的机器上是可重复的。
由此得出的结论是,Chakra尚未针对ASP环境进行设计。