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)
xhr(async:false)HEAD 请求中使用的站点 。哪个已弃用
您可以在这里阅读更多相关信息https://xhr.spec.whatwg.org/
\n\n主要的说法是
\n\n\n\n\n工作人员之外的同步 XMLHttpRequest 正在从 Web 平台中删除,因为它对最终用户\xe2\x80\x99s 体验产生不利影响。(这是一个漫长的过程,需要很多年。)当当前全局对象是 Window 对象时,开发人员不得为 async 参数传递 false。强烈建议用户代理在开发人员工具中对此类使用发出警告,并在发生这种情况时尝试抛出 InvalidAccessError 异常。
\n
所以,将其更改为true.
然后使用@run-at document-end.
我创建了一个可以为您完成这项工作的脚本。
\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})();\nRun Code Online (Sandbox Code Playgroud)\n\n| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |