Exemple #1
0
        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")}");
        }
Exemple #2
0
        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();
        }
Exemple #4
0
        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();
        }
Exemple #5
0
        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();
        }
Exemple #7
0
        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();
        }
Exemple #8
0
        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));
        }
Exemple #9
0
        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();
        }
Exemple #11
0
        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();
        }
Exemple #12
0
 private void AddListener(string eventName, Action handler)
 {
     panorama.Invoke("addListener", eventName, handler);
 }