diff --git a/chrome/content/firerecord.js b/chrome/content/firerecord.js index 567647c..d43590c 100644 --- a/chrome/content/firerecord.js +++ b/chrome/content/firerecord.js @@ -4,533 +4,495 @@ var loadx = null; var page = null; window.addEventListener("load", function load(event) { - window.removeEventListener("load", load, false); //remove listener, no longer needed - firerecord.init(); + window.removeEventListener("load", load, false); // remove listener, no + // longer needed + firerecord.init(); }, false); - -var firerecord = function () { - var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); - return { - init: function () { - getBrowser().addEventListener("load", function (){alert("loaded");}); - var appcontent = document.getElementById("appcontent"); // browser - if (appcontent) { - appcontent.addEventListener("DOMContentLoaded", firerecord.run, true); - } - }, - - //Rylan - running: function (){ - if(recordingx){ - recordingx = false; - alert("Stop Listen"); - openUILinkIn(window.content.location.href,"current"); - //document.location.reload(); - //closes all tabs on firefox. - } - else{ - recordingx = true; - alert("Start Listen"); - //createFile("Initialize New Test File"); - firerecord.run(); - } - - }, - openfile: function(){ - - path = io.openPath(); - - }, - newfile: function(){ - path = io.newPath(); - createFile(); - }, - //rylan - /*file: function(){ - const nsIFilePicker = Components.interfaces.nsIFilePicker; - - var fp = Components.classes["@mozilla.org/filepicker;1"] - .createInstance(nsIFilePicker); - fp.init(window, "Dialog Title", nsIFilePicker.modeOpen); - fp.appendFilters(nsIFilePicker.filterAll | nsIFilePicker.filterText); - - var rv = fp.show(); - if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { - var file = fp.file; - // Get the path as string. Note that you usually won't - // need to work with the string paths. - path = fp.file.path; - // work with returned nsILocalFile... - +var firerecord = function() { + var prefManager = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + return { + init : function() { + getBrowser().addEventListener("load", function() { + alert("loaded"); + }); + var appcontent = document.getElementById("appcontent"); // browser + if (appcontent) { + appcontent.addEventListener("DOMContentLoaded", firerecord.run, + true); } - },*/ - - //rylan - checkpage: function(readloc){ - page = window.content.location.href; - if (page != readloc){ - openUILinkIn(readloc,"current"); - - } }, - - //rylan - readr: function(){ - var a= "http://rt.com/news/"; - var b= "A"; - var c= "http://rt.com/news/ukraine-tymoshenko-pardon-request-508/"; + + // Rylan + running : function() { + if (recordingx) { + recordingx = false; + alert("Stop Listen"); + openUILinkIn(window.content.location.href, "current"); + // document.location.reload(); + // closes all tabs on firefox. + } else { + recordingx = true; + alert("Start Listen"); + // createFile("Initialize New Test File"); + firerecord.run(); + } + + }, + openfile : function() { + + path = io.openPath(); + + }, + newfile : function() { + path = io.newPath(); + io.createFile(path); + }, + // rylan + /* + * file: function(){ const nsIFilePicker = + * Components.interfaces.nsIFilePicker; + * + * var fp = Components.classes["@mozilla.org/filepicker;1"] + * .createInstance(nsIFilePicker); fp.init(window, "Dialog Title", + * nsIFilePicker.modeOpen); fp.appendFilters(nsIFilePicker.filterAll | + * nsIFilePicker.filterText); + * + * var rv = fp.show(); if (rv == nsIFilePicker.returnOK || rv == + * nsIFilePicker.returnReplace) { var file = fp.file; // Get the path as + * string. Note that you usually won't // need to work with the string + * paths. path = fp.file.path; // work with returned nsILocalFile... + * } }, + */ + + // rylan + checkpage : function(readloc) { + page = window.content.location.href; + if (page != readloc) { + openUILinkIn(readloc, "current"); + + } + }, + + // rylan + readr : function() { + var a = "http://rt.com/news/"; + var b = "A"; + var c = "http://rt.com/news/ukraine-tymoshenko-pardon-request-508/"; var d = "null"; var e = "null"; var f = "null"; - setTimeout(function(){firerecord.checkpage(a);},5000); - setTimeout(function(){firerecord.fire(b,c,d,e,f);},8000); - //setTimeout(function(){firerecord.fireExp();},8000); + setTimeout(function() { + firerecord.checkpage(a); + }, 5000); + setTimeout(function() { + firerecord.fire(b, c, d, e, f); + }, 8000); + // setTimeout(function(){firerecord.fireExp();},8000); }, - - //rylan - nullCheck: function(elem){ - if(!elem.href){ - elem.href = "null"; - } - if(!elem.name){ - elem.name = "null"; - } - if(!elem.type){ - elem.type= "null"; - } - if(!elem.value){ - elem.value= "null"; - } - if(!elem.form){ - elem.form= "null"; - } - if(!elem.length){ - elem.length= "null"; - } - if(!elem.target){ - elem.target = "null"; - } - if(!elem.action){ - elem.action= "null"; - } - if(!elem.src){ - elem.src= "null"; - } - if(!elem.charset){ - elem.charset= "null"; - } - if(!elem.text){ - elem.text= "null"; - } - if(!elem.index){ - elem.index= "null"; - } - if(!elem.size){ - elem.size= "null"; - } - if(!elem.summary){ - elem.summary= "null"; - } - if(!elem.caption){ - elem.caption= "null"; - } - - return elem; - }, - - /* - - //rylan - fireExp: function(){ - var all = content.document.getElementsByTagName("A"); - for (var i = 0; i < all.length; ++i) { - var elem = all[i]; - if (i==62){ - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } + // David + playback : function() { + var playThis = io.getLine(path); + for(var i = 0; i < playThis.length; i++) + { + alert(playThis[i]); } - },*/ - - //rylan - fire: function(b,c,d,e,f){ - - + }, + + // rylan + nullCheck : function(elem) { + if (!elem.href) { + elem.href = "null"; + } + if (!elem.name) { + elem.name = "null"; + } + if (!elem.type) { + elem.type = "null"; + } + if (!elem.value) { + elem.value = "null"; + } + if (!elem.form) { + elem.form = "null"; + } + if (!elem.length) { + elem.length = "null"; + } + if (!elem.target) { + elem.target = "null"; + } + if (!elem.action) { + elem.action = "null"; + } + if (!elem.src) { + elem.src = "null"; + } + if (!elem.charset) { + elem.charset = "null"; + } + if (!elem.text) { + elem.text = "null"; + } + if (!elem.index) { + elem.index = "null"; + } + if (!elem.size) { + elem.size = "null"; + } + if (!elem.summary) { + elem.summary = "null"; + } + if (!elem.caption) { + elem.caption = "null"; + } + + return elem; + }, + + /* + * + * //rylan fireExp: function(){ var all = + * content.document.getElementsByTagName("A"); for (var i = 0; i < + * all.length; ++i) { var elem = all[i]; if (i==62){ var obj = + * document.createEvent("MouseEvents"); obj.initEvent("click", true, + * true); elem.dispatchEvent(obj); } } }, + */ + + // rylan + fire : function(b, c, d, e, f) { + var all = content.document.getElementsByTagName(b); - for (var i = 0; i < all.length; ++i) { + for ( var i = 0; i < all.length; ++i) { var elem = all[i]; elem = firerecord.nullCheck(elem); switch (elem.tagName) { - //All of these cases need null checks for each attribute. - - case "A": - - if (elem.href == c){ - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - - break; - - case "BUTTON": - if (elem.name == c && elem.type == d && elem.value == e && elem.form == f) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "FORM": - if (elem.name == c && elem.length == d && elem.target == e && elem.action == f) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "IMG": - if (elem.name == c && elem.src == d) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "INPUT": - if (elem.name == c && elem.type == d && elem.value == e) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "LINK": - if (elem.href == c && elem.type == d && elem.charset == e) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "OPTION": - if (elem.text == c && elem.value == d && elem.index == e) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "SELECT": - if (elem.type == c && elem.name == d && elem.size == e) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "TABLE": - if (elem.summary == c && elem.caption == d) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; - case "TEXTAREA": - if (elem.name == c && elem.type == d && elem.value == e) - { - var obj = document.createEvent("MouseEvents"); - obj.initEvent("click", true, true); - elem.dispatchEvent(obj); - } - break; + // All of these cases need null checks for each attribute. + + case "A": + + if (elem.href == c) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + + break; + + case "BUTTON": + if (elem.name == c && elem.type == d && elem.value == e + && elem.form == f) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "FORM": + if (elem.name == c && elem.length == d && elem.target == e + && elem.action == f) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "IMG": + if (elem.name == c && elem.src == d) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "INPUT": + if (elem.name == c && elem.type == d && elem.value == e) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "LINK": + if (elem.href == c && elem.type == d && elem.charset == e) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "OPTION": + if (elem.text == c && elem.value == d && elem.index == e) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "SELECT": + if (elem.type == c && elem.name == d && elem.size == e) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "TABLE": + if (elem.summary == c && elem.caption == d) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + case "TEXTAREA": + if (elem.name == c && elem.type == d && elem.value == e) { + var obj = document.createEvent("MouseEvents"); + obj.initEvent("click", true, true); + elem.dispatchEvent(obj); + } + break; + + } - } - - - } - + }, - - - run : function () { - - var head = content.document.getElementsByTagName("head")[0], - style = content.document.getElementById("link-target-finder-style"), - all = content.document.getElementsByTagName("*"), - foundElements = 0; - var info = new Array(); // Made this global - var Recording = true; // Just need this until we finish with the the buttons. + run : function() { - if (!style) { - style = content.document.createElement("link"); - style.id = "link-target-finder-style"; - style.type = "text/css"; - style.rel = "stylesheet"; - style.href = "chrome://firerecord/skin/skin.css"; - head.appendChild(style); - } + var head = content.document.getElementsByTagName("head")[0], style = content.document + .getElementById("link-target-finder-style"), all = content.document + .getElementsByTagName("*"), foundElements = 0; - // Find all elements attributes and add a listener - //----------------------------------------------------------- - // Add author(s) to this section. Who did this? David and Peter? - for (var i = 0; i < all.length; ++i) { - //Define the classname variable - elm = all[i]; - //deleted local call to new array info - var validtags = ["A", "BUTTON", "FORM", "IMG", "INPUT", "LINK", "OPTION", "SELECT", "TABLE", "TEXTAREA"]; - //Add a click event listener to all the valid tags. - if (validtags.indexOf(all[i].tagName) < 0) continue; - - info[0] = all[i].tagName; + var info = new Array(); // Made this global + var Recording = true; // Just need this until we finish with the + // the buttons. - //Feel free to change this to a for each... - if(recordingx){ - switch (info[0]) { - //All of these cases need null checks for each attribute. - case "INPUT": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("keyup", handleType, false); - break; - case "A": - - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - case "BUTTON": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - case "FORM": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - case "IMG": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - /*case "INPUT": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break;*/ - case "LINK": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - case "OPTION": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - case "SELECT": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - case "TABLE": - - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - case "TEXTAREA": - elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; - elm.addEventListener("click", handleEvent, false); - break; - - } - } - - } - //---------------------------------------------------------------- - - - - } - - - }; - - //rylan - function handleEvent(e) { - var targ; - if (!e) { - var e = window.event; - } - if (e.target) { - targ = e.target; - } - else if (e.srcElement) { - targ = e.srcElement; - } - - //--------------------------------------------------------------------- - - - - - - //_____________________________________________________________________ - - var taginfo = new Array(); - - taginfo[0] = targ.tagName; - var countr; - //Feel free to change this to a for each... - switch (taginfo[0]) { - //All of these cases need null checks for each attribute. - - case "A": - taginfo[1] = targ.href; - - break; - case "BUTTON": - taginfo[1] = targ.name; - taginfo[2] = targ.type; - taginfo[3] = targ.value; - taginfo[4] = targ.form; - - break; - case "FORM": - taginfo[1] = targ.name; - taginfo[2] = targ.length; - taginfo[3] = targ.target; - taginfo[4] = targ.action; - - break; - case "IMG": - taginfo[1] = targ.name; - taginfo[2] = targ.src; - - break; - /*case "INPUT": - taginfo[1] = targ.name; - taginfo[2] = targ.type; - taginfo[3] = targ.value; - - break;*/ - case "LINK": - taginfo[1] = targ.href; - taginfo[2] = targ.type; - taginfo[3] = targ.charset; - - break; - case "OPTION": - taginfo[1] = targ.text; - taginfo[2] = targ.value; - taginfo[3] = targ.index; - - break; - case "SELECT": - taginfo[1] = targ.type; - taginfo[2] = targ.name; - taginfo[3] = targ.size; - - break; - case "TABLE": - taginfo[1] = targ.summary; - taginfo[2] = targ.caption; - - break; - case "TEXTAREA": - taginfo[1] = targ.name; - taginfo[2] = targ.type; - taginfo[3] = targ.value; - - break; - - } - - - if(!taginfo[1]){ - taginfo[1]= "null"; - } - if(!taginfo[2]){ - taginfo[2]= "null"; - } - if(!taginfo[3]){ - taginfo[3]= "null"; - } - if(!taginfo[4]){ - taginfo[4]= "null"; - } - - - /* - var positionFind = content.document.getElementsByTagName(taginfo[0]); - for (var i = 0; i < positionFind.length; ++i) { - if (targ = positionFind[i]){ - taginfo[5] = i; - + if (!style) { + style = content.document.createElement("link"); + style.id = "link-target-finder-style"; + style.type = "text/css"; + style.rel = "stylesheet"; + style.href = "chrome://firerecord/skin/skin.css"; + head.appendChild(style); } + + // Find all elements attributes and add a listener + // ----------------------------------------------------------- + // Add author(s) to this section. Who did this? David and Peter? + for ( var i = 0; i < all.length; ++i) { + // Define the classname variable + elm = all[i]; + // deleted local call to new array info + var validtags = [ "A", "BUTTON", "FORM", "IMG", "INPUT", + "LINK", "OPTION", "SELECT", "TABLE", "TEXTAREA" ]; + // Add a click event listener to all the valid tags. + if (validtags.indexOf(all[i].tagName) < 0) + continue; + + info[0] = all[i].tagName; + + // Feel free to change this to a for each... + if (recordingx) { + switch (info[0]) { + // All of these cases need null checks for each attribute. + case "INPUT": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("keyup", handleType, false); + break; + case "A": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + case "BUTTON": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + case "FORM": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + case "IMG": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + /* + * case "INPUT": + * + * elm.className += ((elm.className.length > 0) ? " " : "") + + * "link-target-finder-selected"; + * elm.addEventListener("click", handleEvent, false); break; + */ + case "LINK": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + case "OPTION": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + case "SELECT": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + case "TABLE": + + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + case "TEXTAREA": + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + break; + + } + } + + } + // ---------------------------------------------------------------- + } - alert(taginfo[5]);*/ - - - - var contents = taginfo.join(' :: ')+"\n"; - - io.appendPath(path, window.content.location.href+"\n"); + + }; + + // rylan + function handleEvent(e) { + var targ; + if (!e) { + var e = window.event; + } + if (e.target) { + targ = e.target; + } else if (e.srcElement) { + targ = e.srcElement; + } + + // --------------------------------------------------------------------- + + // _____________________________________________________________________ + + var taginfo = new Array(); + + taginfo[0] = targ.tagName; + var countr; + // Feel free to change this to a for each... + switch (taginfo[0]) { + // All of these cases need null checks for each attribute. + + case "A": + taginfo[1] = targ.href; + + break; + case "BUTTON": + taginfo[1] = targ.name; + taginfo[2] = targ.type; + taginfo[3] = targ.value; + taginfo[4] = targ.form; + + break; + case "FORM": + taginfo[1] = targ.name; + taginfo[2] = targ.length; + taginfo[3] = targ.target; + taginfo[4] = targ.action; + + break; + case "IMG": + taginfo[1] = targ.name; + taginfo[2] = targ.src; + + break; + /* + * case "INPUT": taginfo[1] = targ.name; taginfo[2] = targ.type; + * taginfo[3] = targ.value; + * + * break; + */ + case "LINK": + taginfo[1] = targ.href; + taginfo[2] = targ.type; + taginfo[3] = targ.charset; + + break; + case "OPTION": + taginfo[1] = targ.text; + taginfo[2] = targ.value; + taginfo[3] = targ.index; + + break; + case "SELECT": + taginfo[1] = targ.type; + taginfo[2] = targ.name; + taginfo[3] = targ.size; + + break; + case "TABLE": + taginfo[1] = targ.summary; + taginfo[2] = targ.caption; + + break; + case "TEXTAREA": + taginfo[1] = targ.name; + taginfo[2] = targ.type; + taginfo[3] = targ.value; + + break; + + } + + if (!taginfo[1]) { + taginfo[1] = "null"; + } + if (!taginfo[2]) { + taginfo[2] = "null"; + } + if (!taginfo[3]) { + taginfo[3] = "null"; + } + if (!taginfo[4]) { + taginfo[4] = "null"; + } + + /* + * var positionFind = content.document.getElementsByTagName(taginfo[0]); + * for (var i = 0; i < positionFind.length; ++i) { if (targ = + * positionFind[i]){ taginfo[5] = i; + * } } alert(taginfo[5]); + */ + + var contents = taginfo.join(' :: ') + "\n"; + + io.appendPath(path, window.content.location.href + "\n"); io.appendPath(path, contents); - - e.cancelBubble = true; - }; -}(); -function createFile() { - - alert("created File"); - var file1 = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); - file1.initWithPath(path); - //alert("create file nullcheck" +file1.toString()); - var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); - // use 0x02 | 0x10 to open file for appending. - foStream.init(file1, 0x02 | 0x08 | 0x20, 438, 0); - var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"]. - createInstance(Components.interfaces.nsIConverterOutputStream); - converter.init(foStream, "UTF-8", 0, 0); - - converter.close(); // this closes foStream -} + e.cancelBubble = true; + } + ; -function appendFile(contents) { +}(); - alert("appended File"); - var file1 = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); - file1.initWithPath(path); - //alert("append file nullcheck: "+file1.toString()); - var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); - // use 0x02 | 0x10 to open file for appending. - foStream.init(file1, 0x02 | 0x10, 438, 0); - var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"]. - createInstance(Components.interfaces.nsIConverterOutputStream); - converter.init(foStream, "UTF-8", 0, 0); - - converter.writeString(contents); - converter.close(); -} function handleType(e) { - var targ; - if (!e) { - var e = window.event; - } - if (e.target) { - targ = e.target; - } - else if (e.srcElement) { - targ = e.srcElement; - } - alert("Type Changed"); - e.cancelBubble = true; + var targ; + if (!e) { + var e = window.event; + } + if (e.target) { + targ = e.target; + } else if (e.srcElement) { + targ = e.srcElement; + } + alert("Type Changed"); + e.cancelBubble = true; }