如何转换基于IE浏览器的Msxml2.XMLHTTP网站,以便它也适用于Firefox?

Ho1*_*Ho1 6 javascript xmlhttprequest cross-browser

这是一个仅限IE的网站,我想与其他浏览器一起使用,例如Firefox:

https://golestan.sbu.ac.ir/Forms/AuthenticateUser/login.htm

我被迫将这个网站用于我的大学.它使用Msxml2.XMLHTTP,这是一个仅限IE的功能.我试图将其转换为XMLHttpRequest仅适用于Firefox.这是我创建的Greasemonkey脚本.现在它没有给出错误,但它不起作用.所有功能都来自网站的原始脚本,但它们会被更改以便它们可以使用XMLHttpRequest.如果登录脚本出现,我很好.我该如何调试这个javascript?

// ==UserScript==
// @name        Golestan Login
// @namespace   sbu.ac.ir
// @include     https://golestan.sbu.ac.ir/Forms/AuthenticateUser/login.htm
// @version     1
// @grant       none
// ==/UserScript==

var isInternetExplorer = 0;

function check(){
  var x;
if (window.XMLHttpRequest) {
  x = new XMLHttpRequest();
} else {
  try { 
    x = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try { 
      x = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      x = false; 
    }
  }
}
  x.open("HEAD",document.location,true);
  x.send();
  var sd=new Date(x.getResponseHeader('Last-Modified'));
  var cd=new Date(document.lastModified);
  if(sd-cd>3660000){
    document.cookie = "reloading=1";
    window.location.reload(true);
    return false;
  }
  return true;
}


        function a(){
            for (k = 0; k < nall; k++) {
                td = document.createElement('TD');
                td.className = 'e';
                Pr.appendChild(td);
            }
            if (!check()) {
                //window.open("/_Templates/howtoclearcache.htm","_blank");
                //top.close();
                return;
            }
            var aCookie = document.cookie.split("; ");
            var cook=0;
            for (var i=0; i < aCookie.length; i++)
            {
                var aCrumb = aCookie[i].split("=");
                if ("reloading" == aCrumb[0]) {
                    cook=unescape(aCrumb[1]);
                    break;
                }
            }
            var ind=0;
            for( i=0;i<all.length;i=i+2){
                if(all[i+1]==1)
                    for(j=0;j<4;j++){
  var r;
if (window.XMLHttpRequest) {
  r = new XMLHttpRequest();
} else {
  try { 
    r = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try { 
      r = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      r = false; 
    }
  }
}


                        r.open("GET", all[i]+imstat[j]+".gif", true);
                        if(cook==1) r.setRequestHeader('If-Modified-Since','Sat,01 Jan 2000 00:00:00 GMT');
                        getobj(r,ind++);
                    }
                else{
  var r;
if (window.XMLHttpRequest) {
  r = new XMLHttpRequest();
} else {
  try { 
    r = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try { 
      r = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      r = false; 
    }
  }
}                   r.open("GET", all[i], true);
                    if(cook==1) r.setRequestHeader('If-Modified-Since','Sat,01 Jan 2000 00:00:00 GMT');
                    getobj(r,ind++);
                }
            }
            document.cookie = "reloading=0; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
        }

function main_DoFSCommand(command, args) {
    var mainObj = document.all.main;
    //
    // Place your code here.
    //
    document.getElementById("rdir").style.visibility = "hidden";
    if(command != "showmenu")
    if(command == "Animation_Complete")
    {
        var x = 0;
        var y = 0;
        x = main.clientHeight/2 - 300;
        y = main.clientWidth/2 - 400;
        document.getElementById("iframeNews").style.top = x + 120;
        document.getElementById("iframeNews").style.left = y + 264;
        modifySrc();
        document.getElementById("iframeNews").style.visibility = "visible";

    }
    else
    {
        if(command == "Enter")
        {
            bal('main');
        }
        else if(command == "Education")
        {
            bal('test');
        }
        else
            document.getElementById("iframeNews").style.visibility = "hidden";
    }
}

// http://stackoverflow.com/questions/21271997
addJS_Node (check);
addJS_Node (a);
addJS_Node (main_DoFSCommand);

isInternetExplorer=true;

function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
    var D                                   = document;
    var scriptNode                          = D.createElement ('script');
    if (runOnLoad) {
        scriptNode.addEventListener ("load", runOnLoad, false);
    }
    scriptNode.type                         = "text/javascript";
    if (text)       scriptNode.textContent  = text;
    if (s_URL)      scriptNode.src          = s_URL;
    if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';

    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (scriptNode);
}
Run Code Online (Sandbox Code Playgroud)

我认为这项工作值得做,因为数百名大学生用户受到了影响.

更新:我们可以更进一步,达到目标main.htm.所以,我为这个页面编写了另一个脚本.但是,最后我得到了ReferenceError: element is not defined[Learn More].

// ==UserScript==
// @name        Golestan Main
// @namespace   sbu.ac.ir
// @include     https://golestan.sbu.ac.ir/Forms/AuthenticateUser/main.htm
// @version     1
// @grant       none
// ==/UserScript==

// Microsoft WebService Behavior (Predecessor of modern AJAX)
// Information: https://web.archive.org/web/20060101200359/https://msdn.microsoft.com/workshop/author/webservice/webservice.asp
// JavaScript version: https://raw.githubusercontent.com/nzakas/professional-javascript/master/edition1/ch17/webservice.htc

// NOTE: You should paste the Javascript code from the above URL here

// end Microsoft WebService Behavior


function l(){
            useService("../f0241_process_authexit/authexit.asmx?WSDL", "get");
//            useService("authuser.asmx?WSDL", "get");
            mt = new MainTit(document,titH);
            mt.Maxi();
            t = new Tab(document,titH,0,document.body.clientWidth,document.body.clientHeight-titH);
            t.maintitle=mt;
            OpenFaci('???? ????','nav.htm?fid=0;1&tck='+'&'+location.search.replace('?',''));
            mt.HideGTit();
            KeysValues = location.search.split(/[\?&]+/);
            for (i = 0; i < KeysValues.length; i++) {
                    KeyValue = KeysValues[i].split("=");
                    if (KeyValue[0] == "CSURL") {
                        CSURL = KeyValue[1];
                        break;
                    }
            }
        }

function ex(ltck,tck,u,si,ft,fid,sess){
            var co = createCallOptions();
                co.funcName = "ex";
                co.async = false;
            // callService(function(result){if(result.error){/*alert(result.errorDetail.string);*/}},"ex",ltck,tck,u,si,ft,fid,sess);
                callService(co,ltck,tck,u,si,ft,fid,sess);

}


addJS_Node (l);
addJS_Node (ex);

addJS_Node(ErrDetail);
addJS_Node(postError);
addJS_Node(returnError);
addJS_Node(createCallOptions);
addJS_Node(createUseOptions);
addJS_Node(cloneObject);
addJS_Node(ensureVBArray);
addJS_Node(encb64hlp);
addJS_Node(decb64hlp);
addJS_Node(encb64);
addJS_Node(decb64);
addJS_Node(ensureWsdlUrl);
addJS_Node(allocCall);
addJS_Node(fnShowProgress);
addJS_Node(isSimpleType);
addJS_Node(isPrimitive);
addJS_Node(getSdl);
addJS_Node(processService);
addJS_Node(onImportLoaded);
addJS_Node(loadImports);
addJS_Node(invokeNext);
addJS_Node(callNext);
addJS_Node(getAttrib);
addJS_Node(getBaseName);
addJS_Node(getQualifier);
addJS_Node(getNextNsq);
addJS_Node(getUniqueNsq);
addJS_Node(parseSimpleType);
addJS_Node(parseType);
addJS_Node(parseArrayType);
addJS_Node(parseComplexType);
addJS_Node(parseAttrib);
addJS_Node(parseElem);
addJS_Node(parseSoapHeader);
addJS_Node(expBase);
addJS_Node(parseSchemas);
addJS_Node(parseSdl);
addJS_Node(ensureXmlHttp);
addJS_Node(encodeHeader);
addJS_Node(_invoke);
addJS_Node(callService);
addJS_Node(useService);
addJS_Node(getMsg);
addJS_Node(fixupDT);
addJS_Node(encTZ);
addJS_Node(encodePrimitive);
addJS_Node(bldJsAry);
addJS_Node(getNextIndexAry);
addJS_Node(vbArrayToJs);
addJS_Node(encodeArray);
addJS_Node(encodeVar);
addJS_Node(getArySize);
addJS_Node(get1stAryItem);
addJS_Node(getAryItemFromIndex);
addJS_Node(getSchema);
addJS_Node(getArySizeInfo);
addJS_Node(encodeAttrib);
addJS_Node(serPart);
addJS_Node(getWrap);
addJS_Node(encodeArgs);
addJS_Node(returnResult);
addJS_Node(decTZ);
addJS_Node(applyTZ);
addJS_Node(decDate);
addJS_Node(decTime);
addJS_Node(decodePrimitive);
addJS_Node(getAryInfo);
addJS_Node(decodeArray);
addJS_Node(decodeAryItem);
addJS_Node(getAryElem);
addJS_Node(decodeElem);
addJS_Node(decodeType);
addJS_Node(processResult);
addJS_Node(hideProgress);
addJS_Node(getResult);


function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
    var D                                   = document;
    var scriptNode                          = D.createElement ('script');
    if (runOnLoad) {
        scriptNode.addEventListener ("load", runOnLoad, false);
    }
    scriptNode.type                         = "text/javascript";
    if (text)       scriptNode.textContent  = text;
    if (s_URL)      scriptNode.src          = s_URL;
    if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';

    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (scriptNode);
}
Run Code Online (Sandbox Code Playgroud)

Sag*_*r V 3

需要注意的事项

\n\n

xhr(async:false)HEAD 请求中使用的站点 。哪个已弃用

\n\n

您可以在这里阅读更多相关信息https://xhr.spec.whatwg.org/

\n\n

主要的说法是

\n\n
\n

工作人员之外的同步 XMLHttpRequest 正在从 Web 平台中删除,因为它对最终用户\xe2\x80\x99s 体验产生不利影响。(这是一个漫长的过程,需要很多年。)当当前全局对象是 Window 对象时,开发人员不得为 async 参数传递 false。强烈建议用户代理在开发人员工具中对此类使用发出警告,并在发生这种情况时尝试抛出 InvalidAccessError 异常。

\n
\n\n

所以,将其更改为true.

\n\n

然后使用@run-at document-end.

\n\n

我创建了一个可以为您完成这项工作的脚本。

\n\n

我使用的方法,

\n\n

从站点复制整个脚本代码并进行必要的更改。

\n\n

在用户脚本中,删除脚本元素并将更改后的脚本注入到网页中。

\n\n

它将改变页面,如下所示。但似乎来自服务器的所有 td 元素都是空的。

\n\n

在此输入图像描述

\n\n

您可以在这里看到网络传输

\n\n

在此输入图像描述

\n\n

这是用户脚本

\n\n
// ==UserScript==\n// @name        golestan\n// @namespace   Sagar V\n// @author      Sagar V\n// @include     https://golestan.sbu.ac.ir/Forms/AuthenticateUser/login.htm\n// @version     1\n// @grant       none\n// @run-at      document-end\n// ==/UserScript==\n\n(function(){\n    var script=document.createElement(\'script\');\n    script.innerHTML=`c=0;\n        Ip="/_Images/";ip="/_images/";tp="/_Templates/";scp="/_Scripts/";stp="/_styles/";Stp="/_Styles/";ap="/Forms/AuthenticateUser/";\n\n\n        all   =new Array(\n                         \'/blank.htm\',0,\n                         scp+\'printTemplate.htm?tck=r\',0,\n                         stp+\'comm_butt2.htc\',0,\n                         stp+\'select.htc\',0,\n                         stp+\'simplegrid.htc\',0,\n                         stp+\'validation.htc\',0,\n                         stp+\'webservice.htc\',0,\n                         Stp+\'helpStyle.css\',0,\n                         Stp+\'winlessmovable.htc\',0,\n                         stp+\'main.css\',0,\n                         stp+\'MenuStyle.css\',0,\n                         stp+\'Toolb.htc\',0,\n                         stp+\'npui.css\',0,\n\n                         ap+\'Message.XSLT\',0,\n                         ap+\'Golestan.htm\',0,\n                         ap+\'NewsPage.htm\',0,\n                         ap+\'LoginPage.htm\',0,\n                         ap+\'TopPage.htm\',0,\n                         ap+\'main.htm\',0,\n\n                         tp+\'Commander.htm\',0,\n                         tp+\'Message_Page.htm\',0,\n                         tp+\'help.htm\',0,\n\n                         scp+\'Commander.js\',0,\n                         scp + \'npobj.js\', 0,\n                         scp + \'faci.js\', 0,\n                         scp+\'Forms1_5.js\',0,\n                         scp+\'help.js\',0,\n                         scp + \'Message.js\', 0,\n                         scp + \'npnfwin.js\', 0,\n\n                         \'/_scripts/jqnpsrv.js\', 0,\n                         \'/_scripts/npgrd.js\', 0,\n                         scp + \'Forms1_5_npgrid.js\', 0,\n\n                         Ip+\'Status_OK.gif\',0,\n                         ip+\'tabs.png\',0,\n                         ip+\'ftabs.png\',0,\n                         ip+\'corner.png\',0,\n                         ip+\'c1.png\',0,\n                         ip+\'jqnpgridicons.png\',0,\n\n                         \'/Forms/F0202_PROCESS_REP_FILTER/command.htm\',0);\n        nall=0;\n        for(k=0;k<all.length;k=k+2){\n            if(all[k+1]==1)nall=nall+4;\n            else nall++;\n        }\n        imstat=new Array(\'\',\'_clicked\',\'_focus\',\'_disable\');\n        function check(){\n            var x=new XMLHttpRequest() || new ActiveXObject("MSXML2.XMLHTTP");\n            x.open("HEAD",document.location,true);\n            x.send();\n            var sd=new Date(x.getResponseHeader(\'Last-Modified\'));\n            var cd=new Date(document.lastModified);\n            if(sd-cd>3660000){\n                //alert(\'\xd8\xa8\xd8\xa7 \xd8\xaa\xd9\x88\xd8\xac\xd9\x87 \xd8\xa8\xd9\x87 \xd8\xaa\xd8\xba\xd9\x8a\xd9\x8a\xd8\xb1\xd8\xa7\xd8\xaa \xd8\xac\xd8\xaf\xd9\x8a\xd8\xaf \xd8\xb3\xd9\x8a\xd8\xb3\xd8\xaa\xd9\x85 \xd8\x8c \xd8\xac\xd9\x87\xd8\xaa \xd9\x85\xd8\xb4\xd8\xa7\xd9\x87\xd8\xaf\xd9\x87 \xda\xa9\xd8\xa7\xd9\x85\xd9\x84 \xd8\xb5\xd9\x81\xd8\xad\xd8\xa7\xd8\xaa \xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 \xd9\x81\xd8\xa7\xd9\x8a\xd9\x84 \xd9\x87\xd8\xa7\xd9\x8a \xd8\xb0\xd8\xae\xd9\x8a\xd8\xb1\xd9\x87 \xd8\xb4\xd8\xaf\xd9\x87 \xd8\xaf\xd8\xb1 \xd9\x85\xd8\xb1\xd9\x88\xd8\xb1\xda\xaf\xd8\xb1 \xd8\xae\xd9\x88\xd8\xaf\xd8\xb1\xd8\xa7 \xd8\xad\xd8\xb0\xd9\x81 \xda\xa9\xd9\x86\xd9\x8a\xd8\xaf\');\n                document.cookie = "reloading=1";\n                window.location.reload(true);\n                return false;\n            }\n            return true;\n        }\n        function a(){\n            for (k = 0; k < nall; k++) {\n                td = document.createElement(\'TD\');\n                td.className = \'e\';\n                Pr.appendChild(td);\n            }\n            if (!check()) {\n                //window.open("/_Templates/howtoclearcache.htm","_blank");\n                //top.close();\n                return;\n            }\n            var aCookie = document.cookie.split("; ");\n            var cook=0;\n            for (var i=0; i < aCookie.length; i++)\n            {\n                var aCrumb = aCookie[i].split("=");\n                if ("reloading" == aCrumb[0]) {\n                    cook=unescape(aCrumb[1]);\n                    break;\n                }\n            }\n            var ind=0;\n            for( i=0;i<all.length;i=i+2){\n                if(all[i+1]==1)\n                    for(j=0;j<4;j++){\n                        var r=new XMLHttpRequest() || new ActiveXObject("MSXML2.XMLHTTP");\n                        r.open("GET", all[i]+imstat[j]+".gif", true);\n                        if(cook==1) r.setRequestHeader(\'If-Modified-Since\',\'Sat,01 Jan 2000 00:00:00 GMT\');\n                        getobj(r,ind++);\n                    }\n                else{\n                    var r=new XMLHttpRequest() || new ActiveXObject("MSXML2.XMLHTTP");\n                    r.open("GET", all[i], true);\n                    if(cook==1) r.setRequestHeader(\'If-Modified-Since\',\'Sat,01 Jan 2000 00:00:00 GMT\');\n                    getobj(r,ind++);\n                }\n            }\n            document.cookie = "reloading=0; expires=Fri, 31 Dec 1999 23:59:59 GMT;";\n        }\n\n\n        function getobj(o,ind){\n            o.onreadystatechange=function(){\n                if(o.readystate==4){\n                    Pr.cells(c).className="f";\n                    c++;\n                    if(c==nall){\n                        if (location.search){\n                            top.location = "main.htm" + location.search ; \n                         }\n                        else\n                    top.location="main.htm";\n                    }\n                }\n            }\n            o.send();\n        }`;\n    //alert(script);\n    document.getElementsByTagName(\'script\')[0].parentNode.removeChild(document.getElementsByTagName(\'script\')[0]);\n    document.head.appendChild(script);\n})();\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n

直接从Github安装

\n