Using DotNetBrowser JavaScript API you can work with JavaScript objects directly from .NET code. First, you need to load a web page and wait until it's loaded completely to access its JavaScript. Then using the Browser.ExecuteJavaScriptAndReturnValue()method you can access the required JavaScript object. For example:


JSValue document= browser.ExecuteJavaScriptAndReturnValue("document");


The method returns JSValue so you need to make sure that received value is a JavaScript object:


if (document is JSObject)
{
    JSObject documentObject = (JSObject)document;
}


Now you can work with the JavaScript document object. You can access and modify its properties. For example, modify its document.title property:


// Call document.title = "New Document Title";
bool success = documentObject.SetProperty("title", JSValue.Create("New Document Title"));

Example

using DotNetBrowser;
using DotNetBrowser.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace JavaScriptCSBridgeSample
{
    class Program
    {
        public static void Main()
        {
            using (Browser browser = BrowserFactory.Create())
            {
                ManualResetEvent waitEvent = new ManualResetEvent(false);
                List<JSValue> arguments = new List<JSValue>();

                browser.FinishLoadingFrameEvent += delegate (object sender, FinishLoadingEventArgs e)
                {
                    if (e.IsMainFrame)
                    {
                        var window = browser.ExecuteJavaScriptAndReturnValue("window");
                        if (window is JSObject)
                        {
                            ((JSObject)window).SetProperty("CSFunction", new CSFunctionCallback("New", "title"));
                        }
                        browser.ExecuteJavaScriptAndReturnValue("MyClass.foo();");
                    }
                };
                browser.TitleChangedEvent += delegate (object sender, TitleEventArgs e)
                {
                    Console.Out.WriteLine("\"document.title\" \"" + e.Title + "\"");
                    waitEvent.Set();
                };


                browser.LoadHTML(@"<html>
                                     <body>
                                        <script type='text/javascript'>
                                            var MyClass = { foo: function () { document.title = CSFunction(); } }
                                        </script>
                                     </body>
                                   </html>");

                waitEvent.WaitOne();
                Thread.Sleep(2000);
            }
        }
    }

    class CSFunctionCallback : JSFunctionCallback
    {
        string a;
        string b;

        public CSFunctionCallback(string a, string b) : base()
        {
            this.a = a;
            this.b = b;
        }

        public object Invoke(params object[] args)
        {
            Console.Out.WriteLine("CSFunction is invoked");
            return JSValue.Create(string.Format("{0} {1}", a, b));
        }
    }
}