Javascript 如何在更改资源的url时检查403和404错误?

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加载资源”的建议吗?另外,如果请求的资源

我正在为TamperMonkey Chrome扩展制作一个用户脚本(与为GreaseMonkey制作一个用户脚本相同)

在我的脚本中,我通过
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)