Internet Explorer lifeline is set to unplug by Microsoft starting from June 15, 2022, so it already entering the countdown stage, and everyone should need to full force and rushing to migrate legacy IE-only web applications to Chrome? Actually, Microsoft still will provide backward compatibility for IE until at least 2029 inside the Edge browser via Microsoft Edge with IE mode.

Detail information about IE timeline can be found here:

https://docs.microsoft.com/en-us/lifecycle/faq/internet-explorer-microsoft-edge

Although it still has some years to go before the actual unplug, it is no reason for us to continue procrastination about the migration. Today let us take a look at how to migrate some of the common use IE ActiveXObject Microsoft.XMLHTTP and Microsoft.XMLDOM to Chrome/Firefox browser.

For JavaScript, the ActiveXObject Microsoft.XMLHTTP and Microsoft.XMLDOM actually have their equivalent object in Chrome liked browser, let have some of the comparisons on the table below. Noted: The Chrome supported code below are built-in code, you can consider using other libraries like jQuery too.

IE SUPPORTED CODECHROME SUPPORTED CODE
xhr = new ActiveXObject(“Microsoft.XMLHTTP”);xhr = new XMLHttpRequest();
var domDoc = new ActiveXObject(“Microsoft.XMLDOM”);domDoc = new DOMParser().parseFromString(xhr.responseText, “text/xml”);
var node = root.selectSingleNode (“/ArrayOfWeatherForecast/WeatherForecast/Summary”);No equivalent, but it can code manually. Refer to funcSelectSingleNode.
var nodes = root.selectNodes(“WeatherForecast”);var nodes = root.getElementsByTagName(“WeatherForecast”);
element.textelement.innerHTML
nodes[i].selectNodes(“Date”)[0].childNodes[0].textnodes[i].getElementsByTagName(“Date”)[0].childNodes[0].nodeValue

Develop Custom DOM object for Edge/Chrome:

 Additionally, we can also create our custom plugin or object. We’ll create a JavaScript object and then create nested methods in this with same name we were having in IE DOM object. Under these methods we can write our custom logic to return the same values or perform same action.

Add jQuery reference before this code and then make a call to getDOM() method like

var myObject= getDOM();

Now as you will type dot (.) after myObject. all method will starts appearing to you and you can use these methods and can also alter them as per your needs.

function getDOM() {
    return Object.create(getDOMFORChrome);
}
var getDOMFORChrome = (function () {
    var Xml = function () {
        return true;
    };
    var ValidateOnParse = function () {
        return true;
    };
    var Url = function () {
        return "";
    };
    var Text = function () {
        return "";
    };
    var ParentNode = function () {
        return "";
    };
    var NodeName = function () {
        return "";
    };
    var NodeValue = function () {
        return "";
    };
    var NodeType = function () {
        return 1;
    };
    var DocumentElement = function (docElements) {
        getDOMFORChrome.documentElement = docElements.documentElementFull.firstElementChild;
        getDOMFORChrome.documentElement.firstChild = docElements.documentElementFull.firstElementChild;
        
        return getDOMFORChrome.documentElement;
    };
    var NextSibling = function () {
        return "";
    };
    var PreviousSibling = function () {
        return "";
    };
    var IsChild = function () {
        return "";
    };
    var FirstChild = function () {
        //sub-Child
        return "";
    };
    var Childnodes = function () {
        return "";
    };
    var NodeTypeValue = function () {
        return "";
    };
    var NodeTypeString = function () {
        return "";
    };
    var Abort = function () {
        //stop execution 
        return true;
    };
    var AppendChild = function (newChild) {
        return newChild;
    };
    var CloneChild = function (deep) {
        return deep;
    };
    var LoadXML = function (bstrXML, propertyToBeCreated) {
		//bstrXML: full XML in string format
       // propertyToBeCreated : new node to be created. 		
         try {
            if (propertyToBeCreated === undefined || propertyToBeCreated === "") {
                getDOMFORChrome.xml = bstrXML; // set data in existing XML property 
            } else {
                getDOMFORChrome[propertyToBeCreated] = bstrXML;  //data will be stored in newly created property.
            }
            return true;
        } catch (e) {
            getDOMFORChrome.xml = "";   // On Error Clear XML 
            getDOMFORChrome[propertyToBeCreated] = "";
            return false;
        }
    };
    var Load = function (xmlSource, propertyToBeCreated) {
        var output = "";
        var flag = true;
        if (xmlSource.length > 0) {
             try {
                getDOMFORChrome.documentElement = getDOMFORChrome.documentElementFull.firstElementChild;
                getDOMFORChrome.documentElement.firstChild["text"] = getDOMFORChrome.documentElementFull.firstElementChild.textContent;
            } catch (e) { var message = e.message; }
             var data = ajaxGetData(xmlSource, "text");
            if (propertyToBeCreated === undefined || propertyToBeCreated === "") {
                getDOMFORChrome.xml = data;
                getDOMFORChrome.url = xmlSource;
                getDOMFORChrome.text = data;
            } else {
                getDOMFORChrome[propertyToBeCreated] = data; //data will be stored in newly created property. 
            }

            flag = true;

        }
        else {
            flag = false; //not loaded
        }
        return flag;
    };
    var SelectNodes = function (docxml, queryNode) {
        // Param docxml: is full XML 
        //Param: queryNode is the node which need to be searched from above XML
        //debugger;
        queryNode = queryNode.replace("//", "");
        const txtArray = queryNode.split("/");
        try {
            var specificNode = txtArray[0];  //node name
        } catch (e) { var message = e.message; }
        var xmlDoc = $.parseXML(docxml);
        $xml = $(xmlDoc);
        sourceXML = $xml.find(specificNode);          //Return required nodes
        return sourceXML;
    };
    var SetAttribute = function (id, value, sourceXML, specificNode) {
        //param :id,  id of XML node.
        //param : value, value of the new node.
        //param :sourceXML, it is the complete XML text  in which node need to be added.
        //param :specificNode, it is the name of node which will get addded in above complete XML and  then final text will get returned. 
        //debugger;
        var test = "";
        var xmlDoc = $.parseXML(sourceXML);
        $xml = $(xmlDoc);
        if (specificNode === undefined || specificNode === "") {
            test = $xml.attr(id, value); //will add prpty at root
        } else {
            //var test = $xml.find('section').attr('marked', 'marked');
            test = $xml.find(specificNode).attr(id, value);
        }
        sourceXML = test[0].outerHTML;
       
        return sourceXML;
    };
    var GetAttribute = function (id, sourceXML, specificNode) {
        debugger;
        //param :id,  id of XML node.
        //param :sourceXML, it is the complete XML text from which node need to be found.
        //param :specificNode, it is the name of node/attr whose text will be returned.
        var xmlDoc = $.parseXML(sourceXML);
        $xml = $(xmlDoc);
        if (specificNode === undefined || specificNode === "") {
            sourceXML = $xml.attr(id); //will return this prpty 
        } else {
            //var test = $xml.find('section').attr('marked', 'marked');
            sourceXML = $xml.find(specificNode).attr(id);
        }
        return sourceXML;
    };
    var SelectSingleNode = function (docxml, queryNode) {
        // Param docxml: is full XML 
        //Param: queryNode is the node which need to be searched from above XML
        const data = "";
        try {
            debugger;
            //If node and attribute both will be passed in 'queryNode' param
            queryNode = queryNode.replace("//", "");
            const txtArray = queryNode.split("/");
            var xmlDoc;
            try {
                var specificNode = txtArray[0];  //node name
                var id = txtArray[1];            // Attribute in above seleted node
                xmlDoc = $.parseXML(docxml);
            } catch (e)
            {
               
               return xmlDoc = docxml; //on error assign whole source xml/string 
            }
            $xml = $(xmlDoc);
            if (id === undefined || id === "") {
                sourceXML = $xml.find(specificNode);          //Return required single/first node
                sourceXML = sourceXML[0];
            } else {
                sourceXML = $xml.find(specificNode).attr(id); //Return node's attribute value  
            }
            return sourceXML;
       
        }
        catch (e) {
            var msg = e.message;
            console.log("core: error in SelectSingleNode");
        }
        return data;
    };
 
    var SetProperty = function (name, value) {
        return true;
    };
    var Xml = function () {
        return true;
    };
  return {
		validateOnParse: ValidateOnParse,
		url: Url,
		text: Text,
		parentNode: ParentNode,
		nodeName: NodeName,
        nodeValue: NodeValue,
        nodeType: NodeType,
		documentElement: DocumentElement,
		nextSibling: NextSibling,
		previousSibling: PreviousSibling,
		isChild: IsChild,
        firstChild: FirstChild,
		childnodes: Childnodes,
        nodeTypeValue: NodeTypeValue,
        nodeTypeString: NodeTypeString,
		abort: Abort,
        appendChild: AppendChild,
        cloneChild: CloneChild, 
        loadXML: LoadXML,
		load: Load,
        selectNodes: SelectNodes,
		setAttribute: SetAttribute,
        getAttribute: GetAttribute,
		selectSingleNode: SelectSingleNode,
        setProperty: SetProperty,
        xml: Xml
  
    };
})();

//Below  Ajax methods will get used  in above Closures. 
function ajaxGetData(getURL, receiveDataType) {
    var arr;
    $.ajax({
        type: "GET",
        //contentType="text/xml",
        dataType: receiveDataType,
        async: false,
        url: getURL,
        //data: "password="+password,
        success: function (data) {
            arr = data;
        }, error: function (error) {
            //alert(error);
        }
    });
    var retText = arr;
    if (retText.lastIndexOf("/>") === retText.length - 2) {
        retText = "";
    }
    else {
        i = retText.search('">') + 2;
        if (i >= 2) {
            retText = retText.substr(i);
            retText = retText.substr(0, retText.lastIndexOf("");
    re = /</g;
    retText = retText.replace(re, "<");
    re = /&/g;
    retText = retText.replace(re, "&");
    return retText;
}
//Returning XML object to load in Custom DOM.
function ajaxGetXMLObject(getURL, receiveDataType) {
    var arr;
    $.ajax({
        type: "GET",
        //contentType="text/xml",
        dataType: receiveDataType,
        async: false,
        url: getURL,
        //data: "password="+password,
        success: function (data) {
            arr = data;
        }, error: function (error) {
            //alert(error);
        }
    });
    //Returning XML object to load in Custom DOM.
    return arr;
}
function ajaxPostData(postURL, dataToSend, sendDataType, receiveDataType) {
    //debugger;
    var arr;
    if (sendDataType !== undefined && sendDataType.length <= 0) { sendDataType = "text/xml"; }
    if (receiveDataType !== undefined && receiveDataType.length ") == retText.length - 2) {
        retText = "";
    }
    else {
        i = retText.search('">') + 2;
        if (i >= 2) {
            retText = retText.substr(i);
            retText = retText.substr(0, retText.lastIndexOf("");
    re = /</g;
    retText = retText.replace(re, "<");
    re = /&/g;
    retText = retText.replace(re, "&");

    return retText;
}
//End of AJAX methods

Leave a Reply

Your email address will not be published. Required fields are marked *

Explore More

How to Center a Popup Window on Screen

JavaScript window.open() method is used to open a popup window. This popup window will be placed in the center of the screen. This example creates the pop-up window without placing it into

How to hide URL in the popup window opened using window.open

If you are using below code to open a popup window in your web page, then address must be appearing in you pop up window and f you want to

window.showModalDialog is deprecated in Edge and Chrome

If you have a website being compatible with Edge/Chrome and in past it was only compatible with IE 11 and if you are using window.showModalDailog in your JavaScript code, then