third test"; $("f1").setAttribute("src", doc1); $("f2").setAttribute("src", doc2); function doTheTest() { var strs = { "f1": "", "f2" : "" }; function attachListener(node, type) { var listener = function() { if (strs[node.id]) strs[node.id] += " "; strs[node.id] += node.id + ".page" + type; } node.addEventListener("page" + type, listener); listener.detach = function() { node.removeEventListener("page" + type, listener); } return listener; } var l1 = attachListener($("f1"), "show"); var l2 = attachListener($("f1"), "hide"); var l3 = attachListener($("f2"), "show"); var l4 = attachListener($("f2"), "hide"); $("f1").swapDocShells($("f2")); is(strs.f1, "f1.pagehide f1.pageshow", "Expected hide then show on first loaded page"); is(strs.f2, "f2.pagehide f2.pageshow", "Expected hide then show on second loaded page"); function listener2() { $("f2").removeEventListener("testEvt", listener2); strs = { "f1": "", "f2" : "" }; $("f1").swapDocShells($("f2")); is(strs.f1, "f1.pagehide", "Expected hide on already-loaded page, then nothing"); is(strs.f2, "f2.pageshow f2.pagehide f2.pageshow", "Expected show on still-loading page, then hide on it, then show " + "on already-loaded page"); strs = { "f1": "", "f2" : "" }; $("f1").addEventListener("pageshow", listener3); } function listener3() { $("f1").removeEventListener("pageshow", listener3); is(strs.f1, "f1.pageshow", "Expected show as our page finishes loading"); is(strs.f2, "", "Expected no more events here."); l1.detach(); l2.detach(); l3.detach(); l4.detach(); window.close(); SimpleTest.finish(); } $("f2").addEventListener("testEvt", listener2, false, true); $("f2").setAttribute("src", doc3); } ]]>