设置全局变量
???????????setTitleDelegate = SetTitle; ???????????alertDelegate = ShowMessage; ???????????context = runtime.CreateContext(); ???????????JavaScriptContext.Current = context; ???????????JavaScriptValue globalObject = JavaScriptValue.GlobalObject; ???????????windowId = JavaScriptPropertyId.FromString("window"); ???????????JavaScriptValue window = JavaScriptValue.CreateObject(); ???????????var type = this.GetType(); ???????????var ps = type.GetProperties(); ???????????foreach (var p in ps) ???????????{ ???????????????if (p.GetMethod != null && p.GetMethod.IsPublic) ???????????????{ ???????????????????var v = p.GetValue(this) ?? ""; ???????????????????window.SetProperty(JavaScriptPropertyId.FromString(p.Name.ToLower()), JavaScriptValue.FromString(v.ToString()), true); ???????????????} ???????????} ???????????globalObject.SetProperty(windowId, window, true); ???????????globalObject.SetProperty(JavaScriptPropertyId.FromString("set_Title"), JavaScriptValue.CreateFunction(setTitleDelegate, IntPtr.Zero), true); ???????????globalObject.SetProperty(JavaScriptPropertyId.FromString("alert"), JavaScriptValue.CreateFunction(alertDelegate, IntPtr.Zero), true);
回调函数
private JavaScriptValue SetTitle(JavaScriptValue callee, bool isConstructCall, JavaScriptValue[] arguments, ushort argumentCount, IntPtr callbackData) ???????{ ???????????for (uint index = 1; index < argumentCount; index++) ???????????{ ???????????????Title = (arguments[index].ConvertToString().ToString()); ???????????} ???????????return JavaScriptValue.Invalid; ???????}
调用代码
???????????string script = scripts.Text; ???????????JavaScriptValue window = JavaScriptValue.GlobalObject.GetProperty(windowId); ???????????var jv = JavaScriptContext.RunScript(script); ???????????var type = this.GetType(); ???????????var ps = type.GetProperties(); ???????????foreach (var p in ps) ???????????{ ???????????????if (p.SetMethod != null && p.SetMethod.IsPublic) ???????????????{ ???????????????????var id = JavaScriptPropertyId.FromString(p.Name.ToLower()); ???????????????????if (id != JavaScriptPropertyId.Invalid) ???????????????????{ ???????????????????????var v = window.GetProperty(id); ???????????????????????if (p.PropertyType.IsAssignableFrom(typeof(string))) ???????????????????????{ ???????????????????????????p.SetValue(this, v.ToString()); ???????????????????????} ???????????????????} ???????????????} ???????????}
ChakraCore ,Net托管编程
原文地址:http://www.cnblogs.com/icoolno1/p/7534771.html