private static async Task CreatePromiseAsync(IJsObject window) { //It is also possible to create a wrapper class for IJsObject that simplifies appending the //handlers and type checks. Such approach can be used to integrate JavaScript promises //with async/await in the .NET application. //Create a promise that is fulfilled and wrap this promise Console.WriteLine("\nCreate another promise that is fulfilled..."); JsPromise promise3 = window.Invoke <IJsObject>("CreatePromise", true).AsPromise(); JsPromise.Result result = await promise3.Then(o => { Console.WriteLine($"Callback:Success: {o}"); return(o); }) .ResolveAsync(); Console.WriteLine($"Result state:{result?.State}"); Console.WriteLine($"Result type:{(result?.Data?.GetType().ToString() ?? "null")}"); //Create a promise that is rejected and wrap this promise Console.WriteLine("\nCreate another promise that is rejected..."); JsPromise promise4 = window.Invoke <IJsObject>("CreatePromise", false).AsPromise(); result = await promise4.ResolveAsync(); Console.WriteLine($"Result state:{result?.State}"); Console.WriteLine($"Result type:{(result?.Data?.GetType().ToString() ?? "null")}"); }
private static void Main(string[] args) { try { Size browserSize = new Size(500, 500); using (IEngine engine = EngineFactory.Create(new EngineOptions.Builder { RenderingMode = RenderingMode.OffScreen, ChromiumSwitches = { "--allow-file-access-from-files" } }.Build())) { Console.WriteLine("Engine created"); using (IBrowser browser = engine.CreateBrowser()) { // 1. Resize browser to the required dimension. browser.Size = browserSize; // 2. Load the required web page and wait until it is loaded completely. browser.Navigation.LoadUrl(Path.GetFullPath("sample.html")).Wait(); // 3. Create canvas, set its width and height IJsObject canvas = browser .MainFrame.ExecuteJavaScript <IJsObject>("document.createElement('canvas');") .Result; IElement image = browser.MainFrame.Document.GetElementByTagName("img"); string width = image.Attributes["width"]; canvas.Properties["width"] = width; string height = image.Attributes["height"]; canvas.Properties["height"] = height; // 4. Get the canvas context and draw the image on it IJsObject ctx = canvas.Invoke("getContext", "2d") as IJsObject; ctx.Invoke("drawImage", image, 0, 0); // 5. Get the data URL and convert it to bytes string dataUrl = canvas.Invoke("toDataURL", "image/png") as string; Console.WriteLine("Data URL: " + dataUrl); byte[] bitmapData = Convert.FromBase64String(FixBase64ForImage(dataUrl)); // 4. Save image to file. using (FileStream fs = new FileStream("image.png", FileMode.Create, FileAccess.Write)) { fs.Write(bitmapData, 0, bitmapData.Length); } Console.WriteLine("Image saved."); } } } catch (Exception e) { Console.WriteLine(e); } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
public static void Main() { try { using (IEngine engine = EngineFactory.Create()) { Console.WriteLine("Engine created"); using (IBrowser browser = engine.CreateBrowser()) { Console.WriteLine("Browser created"); browser.Size = new Size(700, 500); browser.MainFrame.LoadHtml(@"<html> <body> <script type='text/javascript'> function CreatePromise(success) { return new Promise(function(resolve, reject) { if(success) { resolve('Promise fulfilled.'); } else { reject('Promise rejected.'); } }); }; </script> </body> </html>") .Wait(); IJsObject window = browser.MainFrame.ExecuteJavaScript <IJsObject>("window").Result; //Prepare promise handlers Action <object> promiseResolvedHandler = o => Console.WriteLine("Success: " + o); Action <object> promiseRejectedHandler = o => Console.Error.WriteLine("Error: " + o); //Create a promise that is fulfilled Console.WriteLine("Create a promise that is fulfilled..."); IJsObject promise1 = window.Invoke <IJsObject>("CreatePromise", true); //Append fulfillment and rejection handlers to the promise promise1.Invoke("then", promiseResolvedHandler, promiseRejectedHandler); //Create a promise that is rejected Console.WriteLine("Create a promise that is rejected..."); IJsObject promise2 = window.Invoke <IJsObject>("CreatePromise", false); //Append fulfillment and rejection handlers to the promise promise2.Invoke("then", promiseResolvedHandler, promiseRejectedHandler); CreatePromiseAsync(window).Wait(); } } } catch (Exception e) { Console.WriteLine(e); } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
public static void Main() { using (IEngine engine = EngineFactory.Create()) { using (IBrowser browser = engine.CreateBrowser()) { browser.Size = new Size(700, 500); byte[] htmlBytes = Encoding.UTF8.GetBytes(@"<html> <body> <script type='text/javascript'> function CreatePromise(success) { return new Promise(function(resolve, reject) { if(success) { resolve('Promise fulfilled.'); } else { reject('Promise rejected.'); } }); }; </script> </body> </html>"); browser.Navigation .LoadUrl($"data:text/html;base64,{Convert.ToBase64String(htmlBytes)}") .Wait(); IJsObject window = browser.MainFrame .ExecuteJavaScript <IJsObject>("window") .Result; //Prepare promise handlers Action <object> promiseResolvedHandler = o => Console.WriteLine($"Success: {o}"); Action <object> promiseRejectedHandler = o => Console.Error.WriteLine($"Error: {o}"); //Create a promise that is fulfilled Console.WriteLine("Create a promise that is fulfilled..."); IJsObject promise1 = window.Invoke <IJsObject>("CreatePromise", true); //Append fulfillment and rejection handlers to the promise promise1.Invoke("then", promiseResolvedHandler, promiseRejectedHandler); //Create a promise that is rejected Console.WriteLine("Create a promise that is rejected..."); IJsObject promise2 = window.Invoke <IJsObject>("CreatePromise", false); //Append fulfillment and rejection handlers to the promise promise2.Invoke("then", promiseResolvedHandler, promiseRejectedHandler); CreatePromiseAsync(window).Wait(); } } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
private void OnPositionChanged() { IJsObject jsPosition = panorama.Invoke <IJsObject>("getPosition"); double latitude = jsPosition.Invoke <double>("lat"); double longitude = jsPosition.Invoke <double>("lng"); position = new LatLng(latitude, longitude); PositionChanged?.Invoke(this, EventArgs.Empty); }
public static void Main() { try { using (IEngine engine = EngineFactory.Create(new EngineOptions.Builder().Build())) { Console.WriteLine("Engine created"); using (IBrowser browser = engine.CreateBrowser()) { Console.WriteLine("Browser created"); IJsObject document = browser.MainFrame.ExecuteJavaScript <IJsObject>("document").Result; // document.title = "New Title" document.Properties["title"] = "New Title"; // document.write("Hello World!") document.Invoke("write", "Hello World!"); string documentContent = browser.MainFrame.ExecuteJavaScript <string>("document.body.innerText").Result; Console.Out.WriteLine("New content: " + documentContent); } } } catch (Exception e) { Console.WriteLine(e); } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
public static void Main() { using (IEngine engine = EngineFactory.Create()) { using (IBrowser browser = engine.CreateBrowser()) { IJsObject document = browser.MainFrame .ExecuteJavaScript <IJsObject>("document") .Result; // document.title = "New Title" document.Properties["title"] = "New Title"; // document.write("Hello World!") document.Invoke("write", "Hello World!"); string documentContent = browser.MainFrame .ExecuteJavaScript <string>("document.body.innerText") .Result; Console.Out.WriteLine($"New content: {documentContent}"); } } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
private static bool IsPromise(IJsObject jsObject) { if (jsObject == null || jsObject.IsDisposed) { return(false); } IJsObject promisePrototype = jsObject.Frame.ExecuteJavaScript <IJsObject>("Promise.prototype").Result; return(promisePrototype.Invoke <bool>("isPrototypeOf", jsObject)); }
public static void Main() { try { LoggerProvider.Instance.Level = SourceLevels.Information; LoggerProvider.Instance.FileLoggingEnabled = true; LoggerProvider.Instance.OutputFile = "dnb.log"; using (IEngine engine = EngineFactory.Create(new EngineOptions.Builder().Build())) { Console.WriteLine("Engine created"); using (IBrowser browser = engine.CreateBrowser()) { Console.WriteLine("Browser created"); browser.Size = new Size(700, 500); browser.MainFrame.LoadHtml(@"<html> <body> <script type='text/javascript'> var ShowData = function (a) { document.title = a.FullName + ' ' + a.Age + '. ' + a.Walk(a.Children.get_Item(1)) + ' ' + a.Children.get_Item(1).FullName + ' ' + a.Children.get_Item(1).Age; }; </script> </body> </html>") .Wait(); Person person = new Person("Jack", 30, true) { Children = new Dictionary <double, Person>() }; person.Children.Add(1.0, new Person("Oliver", 10, true)); IJsObject value = browser.MainFrame.ExecuteJavaScript <IJsObject>("window").Result; value.Invoke("ShowData", person); Console.WriteLine($"\tBrowser title: {browser.Title}"); } } } catch (Exception e) { Console.WriteLine(e); } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
public static void Main() { LoggerProvider.Instance.Level = SourceLevels.Information; LoggerProvider.Instance.FileLoggingEnabled = true; LoggerProvider.Instance.OutputFile = "dnb.log"; using (IEngine engine = EngineFactory.Create()) { using (IBrowser browser = engine.CreateBrowser()) { browser.Size = new Size(700, 500); byte[] htmlBytes = Encoding.UTF8.GetBytes(@"<html> <body> <script type='text/javascript'> var ShowData = function (a) { document.title = a.FullName + ' ' + a.Age + '. ' + a.Walk(a.Children.get_Item(1)) + ' ' + a.Children.get_Item(1).FullName + ' ' + a.Children.get_Item(1).Age; }; </script> </body> </html>"); browser.Navigation .LoadUrl($"data:text/html;base64,{Convert.ToBase64String(htmlBytes)}") .Wait(); Person person = new Person("Jack", 30, true) { Children = new Dictionary <double, Person>() }; person.Children.Add(1.0, new Person("Oliver", 10, true)); IJsObject value = browser.MainFrame .ExecuteJavaScript <IJsObject>("window") .Result; value.Invoke("ShowData", person); Console.WriteLine($"\tBrowser title: {browser.Title}"); } } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
private static void Main(string[] args) { using (IEngine engine = EngineFactory.Create()) { using (IBrowser browser = engine.CreateBrowser()) { browser.Size = new Size(1024, 768); browser.Navigation.LoadUrl(Path.GetFullPath("example.html")).Wait(); Console.WriteLine("URL loaded"); IDocument document = browser.MainFrame.Document; IJsObject container = document.GetElementById("container") as IJsObject; //Create shadow root. INode shadowRoot = container?.Invoke <INode>("attachShadow", browser .MainFrame .ParseJsonString("{\"mode\": \"open\"}")); Console.WriteLine($"Shadow root created: {(shadowRoot != null)}"); //Fetch shadow root. shadowRoot = container?.Properties["shadowRoot"] as INode; Console.WriteLine($"Shadow root fetched: {(shadowRoot != null)}"); //Add node to shadow root. IElement inside = document.CreateElement("h1"); inside.InnerText = "Inside Shadow DOM"; inside.Attributes["id"] = "inside"; shadowRoot?.Children.Append(inside); //Find new node in shadow root. IElement element = shadowRoot?.GetElementById("inside"); Console.WriteLine($"Inside element inner text: {element?.InnerText}"); //Try finding the same node from the main document. element = document.GetElementById("inside"); Console.WriteLine($"Inside element found in the document: {(element != null)}"); } } Console.WriteLine("Press any key to terminate..."); Console.ReadKey(); }
private void AddListener(string eventName, Action handler) { panorama.Invoke("addListener", eventName, handler); }