显然不是。
我尝试了这个简单的示例脚本:
<%@ 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)。脚本无法继续运行。
如果我再试一次,我会得到:
脚本引擎在“CActiveScriptEngine::ReuseEngine()”的“IActiveScript::GetScriptState()”中抛出异常“C0000005”。
对于这个脚本,这在我的机器上是可重复的。
由此我得出结论,Chakra 并非针对 ASP 环境而设计。