// Register sync method without communicating with Formium object. private JavaScriptValue Add(JavaScriptValue[] arguments) { if (arguments.Length == 2) { var retval = arguments[0].GetDouble() + arguments[1].GetDouble(); return(JavaScriptValue.CreateNumber(retval)); } return(JavaScriptValue.CreateNull()); }
// Example: Map the CLR objects to NanUI's JavaScript context. private void MapClrObjectToJavaScript() { var obj = JavaScriptValue.CreateObject(); // Readonly property obj.SetValue("now", JavaScriptValue.CreateProperty(() => { return(JavaScriptValue.CreateDateTime(DateTime.Now)); })); // Value obj.SetValue("version", JavaScriptValue.CreateString(Assembly.GetExecutingAssembly().GetName().Version?.ToString())); // Readable and writable property obj.SetValue("subtitle", JavaScriptValue.CreateProperty(() => JavaScriptValue.CreateString(Subtitle), title => Subtitle = title.GetString())); // Sync method obj.SetValue("messagebox", JavaScriptValue.CreateFunction(args => { var msg = args.FirstOrDefault(x => x.IsString); var text = msg?.GetString(); InvokeIfRequired(() => { MessageBox.Show(HostWindow, text, "Message from JS", MessageBoxButtons.OK, MessageBoxIcon.Information); }); return(JavaScriptValue.CreateString(text)); })); // Async method obj.SetValue("asyncmethod", JavaScriptValue.CreateFunction((args, callback) => { Task.Run(async() => { var rnd = new Random(DateTime.Now.Millisecond); var rndValue = rnd.Next(1000, 2000); await Task.Delay(rndValue); var obj = JavaScriptValue.CreateObject(); obj.SetValue("delayed", JavaScriptValue.CreateNumber(rndValue)); obj.SetValue("message", JavaScriptValue.CreateString($"Delayed {rndValue} milliseconds")); callback.Success(obj); }); })); RegisterExternalObjectValue("tester", obj); }
private JavaScriptValue GetCultureInfo(Formium owner, JavaScriptValue[] arguments) { var retval = JavaScriptValue.CreateObject(); retval.SetValue("name", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.Name}")); retval.SetValue("displayName", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.DisplayName}")); retval.SetValue("englishName", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.EnglishName}")); retval.SetValue("lcid", JavaScriptValue.CreateNumber(Thread.CurrentThread.CurrentCulture.LCID)); return(retval); }
private JavaScriptValue GetWindowRectangle(Formium owner, JavaScriptValue[] arguments) { var retval = JavaScriptValue.CreateObject(); var rect = new RECT(); User32.GetWindowRect(owner.HostWindowHandle, ref rect); retval.SetValue("x", JavaScriptValue.CreateNumber(rect.left)); retval.SetValue("y", JavaScriptValue.CreateNumber(rect.top)); retval.SetValue("width", JavaScriptValue.CreateNumber(rect.Width)); retval.SetValue("height", JavaScriptValue.CreateNumber(rect.Height)); return(retval); }