1/********************************************************************** 2 * Software: JS Embedded Content 3 * Versión: 1.1 Final (Oct 13, 2006) 4 * Autor: Raspu (donraspu arroba gmail punto com) 5 * Copyleft 2006, Raspu - Algunos derechos reservados. 6 * 7 * "JS Embedded Content" es software libre. Se otorga permiso para copiar, 8 * distribuir y/o modificar este programa bajo los términos de la Licencia 9 * Pública General de GNU, versión 2.0 o cualquier otra versión posterior 10 * (a su elección) publicada por la Free Software Foundation. 11 * 12 * Puedes consultar una copia de la licencia en http://www.gnu.org/copyleft/gpl.html 13 * 14 * 15 * DESCRIPCIÓN: 16 * ------------ 17 * "JS Embedded Content" es una pequeña aplicación desarrollada 18 * mediante Javascript no intrusivo ni obstructivo, que permite la 19 * activación automática de todos los elementos incrustados en un 20 * documento HTML mediante las etiquetas OBJECT, EMBED y/o APPLET. 21 * 22 * NAVEGADORES COMPATIBLES: 23 * ------------------------ 24 * - Ópera 9 final o superior (para versiones anteriores no es requerido) 25 * - Internet Explorer 5 o superior (Windows, en MAC no he probado) 26 * El resto de navegadores no es compatible debido al uso outerHTML, 27 * pero como por el momento no lo requieren no es mayor problema. 28 * 29 * INSTRUCCIONES DE USO: 30 * --------------------- 31 * Sólo debes incluir el archivo "embeddedcontent.js" colocando el siguiente 32 * código entre las etiquetas <HEAD> y </HEAD> de tus documentos HTML: 33 * 34 * <script type="text/javascript" src="embeddedcontent.js" defer="defer"></script> 35 * 36 * NOTA: el uso del atributo DEFER es imprescindible para poder emular en 37 * I. Explorer el evento DOMContentLoaded. 38 **********************************************************************/ 39var embeddedContent = 40{ 41 42 isMSIE : (document.all && !window.opera) ? true : false, 43 44 45 /** 46 * Reinserta en el documento HTML los elementos que han sido incrustados mediante 47 * las etiquetas OBJECT, EMBED y/o APPLET, redefiniendo su propiedad outerHTML 48 */ 49 reinsertContent : function() 50 { 51 var totalNodes = new Array(3); 52 totalNodes['OBJECT'] = document.getElementsByTagName('OBJECT').length; 53 totalNodes['EMBED'] = document.getElementsByTagName('EMBED').length; 54 totalNodes['APPLET'] = document.getElementsByTagName('APPLET').length; 55 for(var tagName in totalNodes) 56 { 57 var counter = totalNodes[tagName] - 1; 58 for(var node; node = document.getElementsByTagName(tagName)[counter]; counter--) 59 { 60 sourceCode = embeddedContent.getSourceCode(node); 61 if(sourceCode) 62 { 63 node.outerHTML = sourceCode; 64 } 65 } 66 } 67 embeddedContent.isMSIE = null; 68 }, 69 70 71 /** 72 * Obtiene el código HTML completo de un determinado nodo. 73 * @param node (object) - El nodo analizado 74 * @return sourceCode (string) - El código HTML obtenido 75 */ 76 getSourceCode : function(node) 77 { 78 var sourceCode = node.outerHTML; 79 switch(node.nodeName) 80 { 81 case 'EMBED': 82 return sourceCode; 83 break; 84 case 'OBJECT': 85 case 'APPLET': 86 var openTag = sourceCode.substr(0, sourceCode.indexOf('>') + 1).toLowerCase(); 87 var closeTag = sourceCode.substr(sourceCode.length - 9).toLowerCase(); 88 if(closeTag != '</object>' && closeTag != '</applet>') 89 { 90 /* Si el nodo está mal formado (etiquetas de apertura y cierre) se debe 91 anular el script ya que podría devolver un resultado incorrecto */ 92 return null; 93 } 94 if(embeddedContent.isMSIE) 95 { 96 /* Para I. Explorer se debe obtener aparte el código HTML de los nodos hijos, 97 ya que la propiedad outerHTML en ocasiones devolverá un resultado incompleto */ 98 var innerCode = embeddedContent.getInnerCode(node); 99 sourceCode = openTag + innerCode + closeTag; 100 } 101 return sourceCode; 102 break; 103 } 104 }, 105 106 107 /** 108 * Obtiene el código HTML de los nodos hijos de un determinado nodo. No se debe utilizar directamente 109 * la propiedad innerHTML ya que en ciertos casos I. Explorer devolverá un resultado incompleto. 110 * @param node (object) - El nodo padre que será analizado 111 * @return innerCode (string) - El código HTML obtenido 112 */ 113 getInnerCode : function(node) 114 { 115 var innerCode = ''; 116 var totalChilds = node.childNodes.length - 1; 117 for(var counter = totalChilds, child; child = node.childNodes[counter]; counter--) 118 { 119 innerCode += child.outerHTML; 120 } 121 return innerCode; 122 } 123 124} 125 126 127/** 128 * Activación: 129 * ----------- 130 * Detectamos el soporte de attachEvent() como filtro para I. Explorer y Ópera. 131 * Para ejecutar el script sólo necesitamos que el DOM (Document Object Model); para 132 * ello en Ópera recurrimos al evento DOMContentLoaded, mientras que en I. Explorer 133 * emulamos dicho evento apoyándonos en el atributo DEFER de la etiqueta SCRIPT 134 * con la que estamos cargando este archivo. 135 */ 136if(document.attachEvent) 137{ 138 if(window.opera) 139 { 140 document.attachEvent("DOMContentLoaded", embeddedContent.reinsertContent); 141 } 142 else 143 { 144 embeddedContent.reinsertContent(); 145 } 146}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.