Javascript 如何在更改资源的url时检查403和404错误?
我正在为TamperMonkey Chrome扩展制作一个用户脚本(与为GreaseMonkey制作一个用户脚本相同) 在我的脚本中,我通过Javascript 如何在更改资源的url时检查403和404错误?,javascript,jquery,google-chrome,greasemonkey,tampermonkey,Javascript,Jquery,Google Chrome,Greasemonkey,Tampermonkey,我正在为TamperMonkey Chrome扩展制作一个用户脚本(与为GreaseMonkey制作一个用户脚本相同) 在我的脚本中,我通过document.getElementsByTagName()对一些文档外部资源(img、css、链接、脚本)进行迭代,并将它们的src或href属性更改为另一个url 在大多数情况下,新url的加载是正确的,但在某些情况下,我的代理会出现404或403错误 你能给我一些关于如何正确处理(如果可能的话)“不能用新url加载资源”的建议吗?另外,如果请求的资源
document.getElementsByTagName()
对一些文档外部资源(img、css、链接、脚本)进行迭代,并将它们的src
或href
属性更改为另一个url
在大多数情况下,新url的加载是正确的,但在某些情况下,我的代理会出现404或403错误
你能给我一些关于如何正确处理(如果可能的话)“不能用新url加载资源”的建议吗?另外,如果请求的资源导致重定向的url,是否可以告诉我资源已重定向(如何检查302)
我现在使用的是纯javascript,没有jquery。但是如果jQuery可以帮助我,我愿意采用它
我考虑过为每个资源url测试XMLHttpRequest结果中的头文件,但在我看来,这就像用大炮杀死苍蝇一样。我宁愿使用一个适当的处理程序,它可以在资源不可用的情况下触发
编辑:或者,如果chrome对每个加载的对象都有一种状态属性,我可以检查 这只是一个想法,我不确定是否可行,但可能值得一试。代码解释:
var errorHandler = function(event) {
// Do something if the script could not be loaded
};
var scripts = document.getElementsByTagName("script");
for(var i = 0, len = scripts.length; i < len; i++) {
scripts[i].onerror = errorHandler;
scripts[i].src = /* Some way to get your new src */;
}
var errorHandler=函数(事件){
//如果无法加载脚本,请执行某些操作
};
var scripts=document.getElementsByTagName(“脚本”);
for(var i=0,len=scripts.length;i
我不确定当您更改现有脚本的src
标记时,onload
、onerror
处理程序是否工作
请报告你的调查结果 我会检查javascript中的document.styleSheets
下面是一个用于样式表的工作JSFIDLE:
对于javascript,我将使用对象检测:因此,可以查看是否有某个对象应该由某个脚本加载。例如,要检测jQuery:
我考虑过测试XMLHttpRequest结果中的头
每一个资源url,但在我看来就像是用一把大炮
杀死一只苍蝇
嗯。。。我就是这么做的,但是我们的脚本有不同的目的
function conectar(metodo, endereco, resposta, corpo) {
callback = function(xhr) { resposta(xhr) };
GM_xmlhttpRequest({
"method" : metodo,
"url" : endereco,
"onerror" : callback,
"onload" : callback,
"headers" : {'Content-Type' : 'application/x-www-form-urlencoded'},
"data" : corpo
});
}
然后
conectar('HEAD', linkkhref, resp)
在这里查看我的:非常感谢您让我了解JSFIDLE,它对于原型设计来说似乎非常有趣。我将尝试使用样式表方法。关于脚本部分,我无法测试已知对象,因为我事先不知道脚本中有什么。
function conectar(metodo, endereco, resposta, corpo) {
callback = function(xhr) { resposta(xhr) };
GM_xmlhttpRequest({
"method" : metodo,
"url" : endereco,
"onerror" : callback,
"onload" : callback,
"headers" : {'Content-Type' : 'application/x-www-form-urlencoded'},
"data" : corpo
});
}
conectar('HEAD', linkkhref, resp)