/** * Project Name: jActivating * Project URI: http://jactivating.sourceforge.net * Description: Allows website users to interact with embedded content without 'activating' it first * Author: David Muņoz * Version: 1.2.0 alpha 2 - May 16, 2007 * License: This software is Public Domain (no rights reserved) * * Installation: * 1) Upload embeddedcontent.js into some directory on your web server. * 2) Include the JavaScript file in the of your document like this: * */ var jActivating = { /** * Declare constants * IS_MSIE checks for Internet Explorer 6 and later versions * TAGS array with affected HTML tags */ IS_MSIE : (document.removeNode && document.createAttribute) ? true : false, TAGS : ['object', 'embed', 'applet'], /** * Activates embedded content reinserting it. * @return void */ activateContent : function() { var i = 0; for(var _tagName; _tagName = jActivating.TAGS[i]; i++) { var j = 0; for(var _node; _node = document.getElementsByTagName(_tagName)[j]; j++) { if(jActivating.IS_MSIE) { jActivating.reinsertHtml(_node); } else { jActivating.reinsertNode(_node); } } } jActivating = null; }, /** * Sets outerHTML property. * @param object - The node * @return void */ reinsertHtml : function(_node) { var _htmlCode = jActivating.getHtmlCode(_node); if(_htmlCode) { _node.outerHTML = _htmlCode; } }, /** * Replaces the node for a clone. * @param object - The original node * @return void */ reinsertNode : function(_node) { var _clone = _node.cloneNode(true); var _parent = _node.parentNode; if(_clone && _parent) { _parent.replaceChild(_clone, _node); } }, /** * Retrieves the object and its content in HTML. * @param object - The analyzed node * @return string - The HTML received, NULL for malformed syntax (end tag) */ getHtmlCode : function(_node) { var _htmlCode = _node.outerHTML; var _name = _node.nodeName.toLowerCase(); if(_name == 'embed') { return _htmlCode; } if(_name == 'object' || _name == 'applet') { var _startTag = _htmlCode.substr(0, _htmlCode.indexOf('>') + 1); var _endTag = _htmlCode.substr(_htmlCode.length - 9).toLowerCase(); // Filters malformed syntax for avoid unexpected results if(_endTag != '' && _endTag != '') { return null; } var _innerHtml = jActivating.getInnerHtml(_node); _htmlCode = _startTag + _innerHtml + _endTag; return _htmlCode; } }, /** * Retrieves the HTML between start and end tags of the object. * @param object - The analyzed node * @return string - The HTML received * * NOTE: the innerHTML property isn't used because Internet Explorer * sometimes returns a empty result. */ getInnerHtml : function(_node) { var _innerHtml = ''; var i = 0; for(var _childNode; _childNode = _node.childNodes[i]; i++) { _innerHtml += _childNode.outerHTML; } return _innerHtml; } } // Execute script only for Internet Explorer (6+) and Opera (9+) if(jActivating.IS_MSIE) { jActivating.activateContent(); } else if(window.opera) { document.addEventListener('DOMContentLoaded', jActivating.activateContent, false); }