用C#在Win 8.1 Chakra中执行JS的一个失败的最小例子
A failing minimal example of executing JS in Win 8.1 Chakra with C#
我正试图通过以下代码执行一小段JS(使用MSDN Chakra Host示例中的Native类):
var runtime = default(JavaScriptRuntime);
Native.ThrowIfError(Native.JsCreateRuntime(JavaScriptRuntimeAttributes.None, JavaScriptRuntimeVersion.VersionEdge, null, out runtime));
var context = default(JavaScriptContext);
Native.ThrowIfError(Native.JsCreateContext(runtime, (Native.IDebugApplication64)null, out context));
Native.ThrowIfError(Native.JsSetCurrentContext(context));
var script = @"var bob = 1;";
var result = default(JavaScriptValue);
var contextCookie = default(JavaScriptSourceContext);
Native.ThrowIfError(Native.JsRunScript(script, contextCookie, "source", out result));
问题是它返回了一个"ScriptCompile"错误,没有我能够发现的其他细节。
有人能说出我错过了什么/做了什么/弄糊涂了吗?
我怀疑你还在为此而挣扎。。。但我只是找到了答案。
如果您在jsrt.h中查看,您会发现所有本机函数在使用字符串参数时都使用wchar_t,但是DllImport属性没有指定字符集,因此它默认为ANSI。
我在Native.cs文件中进行了查找/替换,并将所有DllImport属性更改为read。。。
[DllImport("jscript9.dll", CharSet = CharSet.Unicode)]
现在我的代码运行良好。我已经向GitHub上的样本所有者发送了一个拉取请求,以解决这个问题。更新当前在我的分叉中https://github.com/billti/chakra-host
尝试将其添加到AssemblyInfo.cs
文件中:
[module: DefaultCharSet(CharSet.Unicode)]
我修改了Native.ThrowIfError
的实现,以便在出现ScriptCompile错误的情况下,从errorObject中获取一些值。像这样:
var message = errorObject
.GetProperty("message")
.ToString();
var source = errorObject
.GetProperty("source")
.ToString();
var line = (int)errorObject
.GetProperty("line")
.ToDouble();
var column = (int)errorObject
.GetProperty("column")
.ToDouble();
var length = (int)errorObject
.GetProperty("length")
.ToDouble();
throw new JavaScriptParseException(error, message, source, line, column, length);
这至少可以为您提供更多信息。
相关文章:
- JavaScript到PHP的时间戳失败,增加了大约一个半月的时间
- 为什么一个空的200会在jQuery中创建一个失败
- 为什么我会得到一个“;auth失败”;使用正确的凭据连接到MongoDB时出错
- 当CDN加载失败时,为字体添加一个本地CSS回退
- $.getJSON 到一个带有 include_once 的 php 失败了,但它完成了工作
- jQuery验证另一个值失败
- 我用脚本创建了一个按钮.我可以通过点击按钮调用其他函数吗?我这样做,但失败了
- 当表单验证失败时,我将如何最好地处理下一个事件
- 用C#在Win 8.1 Chakra中执行JS的一个失败的最小例子
- 我正在用java脚本编写一个hangman程序,如果玩家失败了,我需要帮助来显示这个词
- 一个iframe随机失败到XHR
- 循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false
- Angular JS,把json放到ng重复出一个事件失败
- 量角器:失败:row.findElement 不是一个函数
- 如何将 $http.put 封装到一个函数中,该函数执行某些操作,然后返回通过或失败的承诺
- 如何同时运行两个承诺并在nodejs中一个接一个地失败
- jQuery: $.when 延迟的 AJAX 调用 — 一个失败的调用会取消其他调用
- 在所有跨度上循环并更新一个失败的whit JQuery
- MVC3控制器操作以编程方式返回一个失败的发布请求
- 如何制作一个失败的规格清单使用茉莉自定义记者发布到slack