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环境进行设计。

08-28 08:13