【问题标题】:Embedding Chakra Javascript Engine in Windows 8 / .Net 4.5在 Windows 8 / .Net 4.5 中嵌入 Chakra Javascript 引擎
【发布时间】:2011-10-16 03:27:58
【问题描述】:

鉴于 Javascript 在 Windows 8 中的兴起,Windows 8 / .Net 4.5 / VS 2012 是否提供将 Chakra javascript 引擎嵌入应用程序以启用脚本的机制?如果是这样,是否有这方面的文档?

【问题讨论】:

  • 根据您的需要,您也许可以使用其他 JavaScript 实现,例如 Jint 或 IronJS。 (Jurassic 可能行不通——它 P/Invoke 到 V8,我认为 Metro 应用程序中不允许 P/Invoke。)

标签: javascript .net windows-8 chakra


【解决方案1】:

已发布或讨论过没有执行此操作的机制。目前,它仅适用于 IE 和 Metro 风格的应用程序。甚至没有 Windows Scripting Host 风格的曝光。

你想在你的脚本中找到关于 Chakra 的什么?

【讨论】:

  • 嗨,史蒂夫,就我而言,我需要从 Windows 应用商店应用程序和 WPF 调用 javascript。我们正在 WPF 中从 pre-Windows 8 开发一个适用于 Windows 8 及其小兄弟的应用程序。我需要使用 JavaScript 作为脚本语言。因此,一方面,我将拥有一个表示 .NET 中的脚本和对象模型的字符串。我需要将该对象模型传递给脚本,以便脚本在其上运行。您在 Win Store App 和传统 .NET 中看到的任何方式?这可能是两种不同的机制。
【解决方案2】:

IE ActiveX 不使用与 IE 独立版相同的 JavaScript 引擎吗?

您可以简单地嵌入 Internet Explorer ActiveX 框架并将其隐藏。

【讨论】:

    【解决方案3】:

    是的,存在。

    见:https://github.com/Microsoft/ChakraCore/wiki/Embedding-ChakraCore

     using System;
     using System.Runtime.InteropServices;
     using ChakraHost.Hosting;
    
    public class HelloWorld
    {
        static void Main() {
        JavaScriptRuntime runtime;
        JavaScriptContext context;
        JavaScriptSourceContext currentSourceContext = JavaScriptSourceContext.FromIntPtr(IntPtr.Zero);
        JavaScriptValue result;
    
        // Your script, try replace the basic hello world with something else
        string script = "(()=>{return \'Hello world!\';})()";
    
        // Create a runtime. 
        Native.JsCreateRuntime(JavaScriptRuntimeAttributes.None, null, out runtime);
    
        // Create an execution context. 
        Native.JsCreateContext(runtime, out context);
    
        // Now set the execution context as being the current one on this thread.
        Native.JsSetCurrentContext(context);
    
        // Run the script.
        Native.JsRunScript(script, currentSourceContext++, "", out result);
    
        // Convert your script result to String in JavaScript; redundant if your script returns a String
        JavaScriptValue resultJSString;
        Native.JsConvertValueToString(result, out resultJSString);
    
        // Project script result in JS back to C#.
        IntPtr resultPtr;
        UIntPtr stringLength;
        Native.JsStringToPointer(resultJSString, out resultPtr, out stringLength);
    
        string resultString = Marshal.PtrToStringUni(resultPtr);
        Console.WriteLine(resultString);
        Console.ReadLine();
    
        // Dispose runtime
        Native.JsSetCurrentContext(JavaScriptContext.Invalid);
        Native.JsDisposeRuntime(runtime);
    }
    

    }

    【讨论】:

    • 请考虑在 stackoverflow 上添加代码示例,因为链接可能会断开或 repo 可能会被删除。
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2013-11-11
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多