Version 1
[yaffs-website] / node_modules / phantomjs-prebuilt / lib / phantom / examples / page_events.js
diff --git a/node_modules/phantomjs-prebuilt/lib/phantom/examples/page_events.js b/node_modules/phantomjs-prebuilt/lib/phantom/examples/page_events.js
new file mode 100644 (file)
index 0000000..ef6563e
--- /dev/null
@@ -0,0 +1,147 @@
+// The purpose of this is to show how and when events fire, considering 5 steps
+// happening as follows:
+//
+//      1. Load URL
+//      2. Load same URL, but adding an internal FRAGMENT to it
+//      3. Click on an internal Link, that points to another internal FRAGMENT
+//      4. Click on an external Link, that will send the page somewhere else
+//      5. Close page
+//
+// Take particular care when going through the output, to understand when
+// things happen (and in which order). Particularly, notice what DOESN'T
+// happen during step 3.
+//
+// If invoked with "-v" it will print out the Page Resources as they are
+// Requested and Received.
+//
+// NOTE.1: The "onConsoleMessage/onAlert/onPrompt/onConfirm" events are
+// registered but not used here. This is left for you to have fun with.
+// NOTE.2: This script is not here to teach you ANY JavaScript. It's aweful!
+// NOTE.3: Main audience for this are people new to PhantomJS.
+
+"use strict";
+var sys = require("system"),
+    page = require("webpage").create(),
+    logResources = false,
+    step1url = "http://en.wikipedia.org/wiki/DOM_events",
+    step2url = "http://en.wikipedia.org/wiki/DOM_events#Event_flow";
+
+if (sys.args.length > 1 && sys.args[1] === "-v") {
+    logResources = true;
+}
+
+function printArgs() {
+    var i, ilen;
+    for (i = 0, ilen = arguments.length; i < ilen; ++i) {
+        console.log("    arguments[" + i + "] = " + JSON.stringify(arguments[i]));
+    }
+    console.log("");
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+page.onInitialized = function() {
+    console.log("page.onInitialized");
+    printArgs.apply(this, arguments);
+};
+page.onLoadStarted = function() {
+    console.log("page.onLoadStarted");
+    printArgs.apply(this, arguments);
+};
+page.onLoadFinished = function() {
+    console.log("page.onLoadFinished");
+    printArgs.apply(this, arguments);
+};
+page.onUrlChanged = function() {
+    console.log("page.onUrlChanged");
+    printArgs.apply(this, arguments);
+};
+page.onNavigationRequested = function() {
+    console.log("page.onNavigationRequested");
+    printArgs.apply(this, arguments);
+};
+page.onRepaintRequested = function() {
+    console.log("page.onRepaintRequested");
+    printArgs.apply(this, arguments);
+};
+
+if (logResources === true) {
+    page.onResourceRequested = function() {
+        console.log("page.onResourceRequested");
+        printArgs.apply(this, arguments);
+    };
+    page.onResourceReceived = function() {
+        console.log("page.onResourceReceived");
+        printArgs.apply(this, arguments);
+    };
+}
+
+page.onClosing = function() {
+    console.log("page.onClosing");
+    printArgs.apply(this, arguments);
+};
+
+// window.console.log(msg);
+page.onConsoleMessage = function() {
+    console.log("page.onConsoleMessage");
+    printArgs.apply(this, arguments);
+};
+
+// window.alert(msg);
+page.onAlert = function() {
+    console.log("page.onAlert");
+    printArgs.apply(this, arguments);
+};
+// var confirmed = window.confirm(msg);
+page.onConfirm = function() {
+    console.log("page.onConfirm");
+    printArgs.apply(this, arguments);
+};
+// var user_value = window.prompt(msg, default_value);
+page.onPrompt = function() {
+    console.log("page.onPrompt");
+    printArgs.apply(this, arguments);
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+setTimeout(function() {
+    console.log("");
+    console.log("### STEP 1: Load '" + step1url + "'");
+    page.open(step1url);
+}, 0);
+
+setTimeout(function() {
+    console.log("");
+    console.log("### STEP 2: Load '" + step2url + "' (load same URL plus FRAGMENT)");
+    page.open(step2url);
+}, 5000);
+
+setTimeout(function() {
+    console.log("");
+    console.log("### STEP 3: Click on page internal link (aka FRAGMENT)");
+    page.evaluate(function() {
+        var ev = document.createEvent("MouseEvents");
+        ev.initEvent("click", true, true);
+        document.querySelector("a[href='#Event_object']").dispatchEvent(ev);
+    });
+}, 10000);
+
+setTimeout(function() {
+    console.log("");
+    console.log("### STEP 4: Click on page external link");
+    page.evaluate(function() {
+        var ev = document.createEvent("MouseEvents");
+        ev.initEvent("click", true, true);
+        document.querySelector("a[title='JavaScript']").dispatchEvent(ev);
+    });
+}, 15000);
+
+setTimeout(function() {
+    console.log("");
+    console.log("### STEP 5: Close page and shutdown (with a delay)");
+    page.close();
+    setTimeout(function(){
+        phantom.exit();
+    }, 100);
+}, 20000);