示例#1
0
        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());
        }
示例#2
0
        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");
        }
示例#3
0
        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());
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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());
        }
示例#7
0
        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());
        }
示例#8
0
        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);
        }
示例#9
0
        /// <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));
        }
示例#10
0
        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());
        }
示例#11
0
        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");
        }
示例#12
0
        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);
        }
示例#13
0
        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);
        }
示例#14
0
        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);
 }
示例#16
0
 /// <summary>
 /// Creates a new navigation handler for javascript: URLs.
 /// </summary>
 /// <param name="service">The underlying scripting service.</param>
 public JsNavigationHandler(JsScriptingService service)
 {
     _service = service;
 }