public async Task InvokeLoadEventFromJsAndCustomEventFromJsAndCs() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithEventLoop(); var html = @"<!doctype html> <html> <body> <script> var log = []; log.push('a'); document.addEventListener('hello', function() { log.push('c'); }, false); log.push('b'); </script> </body>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var log = service.GetOrCreateJint(document).GetValue("log").AsArray(); document.AddEventListener("hello", (s, ev) => { log.Put(log.Get("length").AsNumber().ToString(), "d", false); }); document.Dispatch(new Event("hello")); Assert.AreEqual(4.0, log.Get("length").AsNumber()); Assert.AreEqual("a", log.Get("0").AsString()); Assert.AreEqual("b", log.Get("1").AsString()); Assert.AreEqual("c", log.Get("2").AsString()); Assert.AreEqual("d", log.Get("3").AsString()); }
public async void BodyOnLoad_Test() { string responseContent = @"<html> <head> <script> var someVar = 'var value'; function body_onload() { console.log('hello') } </script> </head> <body onload='body_onload()'> some text </body> </html>"; var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithConsoleLogger(context => new StandardConsoleLogger(Output)); //var cfg = Configuration.Default.WithJs().WithConsoleLogger(context => new StandardConsoleLogger(Output)); var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(responseContent)); //service.GetOrCreateJint(document).Execute("body_onload"); var body_onload = service.GetOrCreateJint(document).GetValue("body_onload"); var result = body_onload.Invoke(); var someVar = service.GetOrCreateJint(document).GetValue("someVar"); }
private static async Task <String> RunScriptComponent(String script) { var service = new JsScriptingService(); var cfg = Configuration.Default.WithXml().WithEventLoop().With(service); var html = String.Concat("<!doctype html><script>", script, "</script>"); var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var value = service.GetOrCreateJint(document).GetValue("assert"); return(value.AsString()); }
public async Task InvokeFunctionOnLoadEventShouldFireDelayed() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithEventLoop(); var html = "<!doctype html><div id=result></div><script>document.addEventListener('load', function () { document.querySelector('#result').textContent = 'done'; }, false);</script>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)) .WhenStable(); var div = document.QuerySelector("#result"); Assert.AreEqual("done", div.TextContent); }
public async Task RunCSharpFunctionFromJavaScript() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service); var storedValue = 0.0; service.External["square"] = new Action <Double>(x => storedValue = x); var html = "<!doctype html><script>square(4 * 4);</script>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); Assert.AreEqual(16.0, storedValue); }
public async Task ReadStoredJavaScriptValueFromCSharp() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service); var html = "<!doctype html><script>var foo = 'test';</script>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var foo = service.GetOrCreateJint(document).GetValue("foo"); Assert.AreEqual(Types.String, foo.Type); Assert.AreEqual("test", foo.AsString()); }
public async Task RunJavaScriptFunctionFromCSharp() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service); var html = "<!doctype html><script>function square(x) { return x * x; }</script>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var square = service.GetOrCreateJint(document).GetValue("square"); var result = square.Invoke(4); Assert.AreEqual(Types.Number, result.Type); Assert.AreEqual(16.0, result.AsNumber()); }
public async Task InvokeFunctionOnCustomEvent() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithEventLoop(); var html = "<!doctype html><div id=result>0</div><script>var i = 0; document.addEventListener('hello', function () { i++; document.querySelector('#result').textContent = i.toString(); }, false);</script>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var div = document.QuerySelector("#result"); document.Dispatch(new CustomEvent("hello")); Assert.AreEqual("1", div.TextContent); document.Dispatch(new CustomEvent("hello")); Assert.AreEqual("2", div.TextContent); }
/// <summary> /// Sets scripting to true, registers the JavaScript engine and returns /// a new configuration with the scripting service and possible /// auxiliary services, if not yet registered. /// </summary> /// <param name="configuration">The configuration to use.</param> /// <returns>The new configuration.</returns> public static IConfiguration WithJs(this IConfiguration configuration) { var service = new JsScriptingService(); var observer = new EventAttributeObserver(service); if (!configuration.Has <INavigator>()) { configuration = configuration.With <INavigator>(context => new Navigator()); } return(configuration .WithOnly(observer) .With(service)); }
public async Task AccessCSharpInstanceMembersFromJavaScript() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service); service.External["person"] = new Person { Age = 20, Name = "Foobar" }; var html = "<!doctype html><script>var str = person.Name + ' is ' + person.Age + ' years old';</script>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var str = service.GetOrCreateJint(document).GetValue("str"); Assert.AreEqual(Types.String, str.Type); Assert.AreEqual("Foobar is 20 years old", str.AsString()); }
public async void ExporterContentPane1_Test() { var request = CallbackTests.CreateRequest("/ExporterContentPane", HttpMethod.Get); var response = await CallbackTests.ExecuteRequest(Client, request, ClientServiceMock.RegistrationData); var responseContent = await response.Content.ReadAsStringAsync(); Assert.True(response.IsSuccessStatusCode, $"{response.RequestMessage.RequestUri} failed, reason {responseContent}"); var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithConsoleLogger(context => new StandardConsoleLogger(Output)); var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(responseContent)); //var body_onload = service.GetOrCreateJint(document).GetValue("body_onload"); //body_onload.Invoke(); var token = service.GetOrCreateJint(document).GetValue("exportToken"); }
public async Task SetTimeoutWithStringAsFunction() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithEventLoop(); var html = @"<!doctype html> <html> <body> <script> var completed = false; setTimeout('completed = true;', 0); </script> </body>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)) .WhenStable(); var result = service.GetOrCreateJint(document).GetValue("completed").AsBoolean(); Assert.IsTrue(result); }
public async Task AddAndInvokeClickHandlerWithStringFunctionWontWork() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithEventLoop(); var html = @"<!doctype html> <html> <body> <script> var clicked = false; document.onclick = 'clicked = true;'; document.onclick(); </script> </body>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var clicked = service.GetOrCreateJint(document).GetValue("clicked").AsBoolean(); Assert.IsFalse(clicked); }
public async Task AddClickHandlerClassicallyWillExecute() { var service = new JsScriptingService(); var cfg = Configuration.Default.With(service).WithEventLoop(); var html = @"<!doctype html> <html> <body> <script> var clicked = false; document.onclick = function () { clicked = true; }; document.dispatchEvent(new MouseEvent('click')); </script> </body>"; var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html)); var clicked = service.GetOrCreateJint(document).GetValue("clicked").AsBoolean(); Assert.IsTrue(clicked); }
public EventAttributeObserver(JsScriptingService service) { _service = service; _observers = new Dictionary <String, Action <IElement, String> >(); RegisterEventCallback <IHtmlBodyElement>(EventNames.AfterPrint); RegisterEventCallback <IHtmlBodyElement>(EventNames.BeforePrint); RegisterEventCallback <IHtmlBodyElement>(EventNames.Unloading); RegisterEventCallback <IHtmlBodyElement>(EventNames.HashChange); RegisterEventCallback <IHtmlBodyElement>(EventNames.Message); RegisterEventCallback <IHtmlBodyElement>(EventNames.Offline); RegisterEventCallback <IHtmlBodyElement>(EventNames.Online); RegisterEventCallback <IHtmlBodyElement>(EventNames.PageHide); RegisterEventCallback <IHtmlBodyElement>(EventNames.PageShow); RegisterEventCallback <IHtmlBodyElement>(EventNames.PopState); RegisterEventCallback <IHtmlBodyElement>(EventNames.Storage); RegisterEventCallback <IHtmlBodyElement>(EventNames.Unload); RegisterEventCallback <IHtmlElement>(EventNames.Load); RegisterEventCallback <IHtmlElement>(EventNames.Abort); RegisterEventCallback <IHtmlElement>(EventNames.Blur); RegisterEventCallback <IHtmlElement>(EventNames.Cancel); RegisterEventCallback <IHtmlElement>(EventNames.CanPlay); RegisterEventCallback <IHtmlElement>(EventNames.CanPlayThrough); RegisterEventCallback <IHtmlElement>(EventNames.Change); RegisterEventCallback <IHtmlElement>(EventNames.Click); RegisterEventCallback <IHtmlElement>(EventNames.CueChange); RegisterEventCallback <IHtmlElement>(EventNames.DblClick); RegisterEventCallback <IHtmlElement>(EventNames.Drag); RegisterEventCallback <IHtmlElement>(EventNames.DragEnd); RegisterEventCallback <IHtmlElement>(EventNames.DragEnter); RegisterEventCallback <IHtmlElement>(EventNames.DragExit); RegisterEventCallback <IHtmlElement>(EventNames.DragLeave); RegisterEventCallback <IHtmlElement>(EventNames.DragOver); RegisterEventCallback <IHtmlElement>(EventNames.DragStart); RegisterEventCallback <IHtmlElement>(EventNames.Drop); RegisterEventCallback <IHtmlElement>(EventNames.DurationChange); RegisterEventCallback <IHtmlElement>(EventNames.Emptied); RegisterEventCallback <IHtmlElement>(EventNames.Ended); RegisterEventCallback <IHtmlElement>(EventNames.Error); RegisterEventCallback <IHtmlElement>(EventNames.Focus); RegisterEventCallback <IHtmlElement>(EventNames.Input); RegisterEventCallback <IHtmlElement>(EventNames.Invalid); RegisterEventCallback <IHtmlElement>(EventNames.Keydown); RegisterEventCallback <IHtmlElement>(EventNames.Keypress); RegisterEventCallback <IHtmlElement>(EventNames.Keyup); RegisterEventCallback <IHtmlElement>(EventNames.LoadedData); RegisterEventCallback <IHtmlElement>(EventNames.LoadedMetaData); RegisterEventCallback <IHtmlElement>(EventNames.LoadStart); RegisterEventCallback <IHtmlElement>(EventNames.Mousedown); RegisterEventCallback <IHtmlElement>(EventNames.Mouseup); RegisterEventCallback <IHtmlElement>(EventNames.Mouseenter); RegisterEventCallback <IHtmlElement>(EventNames.Mouseleave); RegisterEventCallback <IHtmlElement>(EventNames.Mouseover); RegisterEventCallback <IHtmlElement>(EventNames.Mousemove); RegisterEventCallback <IHtmlElement>(EventNames.Wheel); RegisterEventCallback <IHtmlElement>(EventNames.Pause); RegisterEventCallback <IHtmlElement>(EventNames.Play); RegisterEventCallback <IHtmlElement>(EventNames.Playing); RegisterEventCallback <IHtmlElement>(EventNames.Progress); RegisterEventCallback <IHtmlElement>(EventNames.RateChange); RegisterEventCallback <IHtmlElement>(EventNames.Reset); RegisterEventCallback <IHtmlElement>(EventNames.Resize); RegisterEventCallback <IHtmlElement>(EventNames.Scroll); RegisterEventCallback <IHtmlElement>(EventNames.Seeked); RegisterEventCallback <IHtmlElement>(EventNames.Seeking); RegisterEventCallback <IHtmlElement>(EventNames.Select); RegisterEventCallback <IHtmlElement>(EventNames.Show); RegisterEventCallback <IHtmlElement>(EventNames.Stalled); RegisterEventCallback <IHtmlElement>(EventNames.Submit); RegisterEventCallback <IHtmlElement>(EventNames.Suspend); RegisterEventCallback <IHtmlElement>(EventNames.TimeUpdate); RegisterEventCallback <IHtmlElement>(EventNames.Toggle); RegisterEventCallback <IHtmlElement>(EventNames.VolumeChange); RegisterEventCallback <IHtmlElement>(EventNames.Waiting); }
/// <summary> /// Creates a new navigation handler for javascript: URLs. /// </summary> /// <param name="service">The underlying scripting service.</param> public JsNavigationHandler(JsScriptingService service) { _service = service; }