假设我想从CDN引用angularjs,但我还想在CDN调用失败的情况下回退,例如指向本地js文件.说到JQuery,我看过一些例子,你可以在javascript中做这样的事情:
if(typeof jQuery == 'undefined') {
....
}
Run Code Online (Sandbox Code Playgroud)
我能做什么类似的angularjs?
我正在使用以下技术动态加载Javascript:
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "file.js";
document.body.appendChild(script);
Run Code Online (Sandbox Code Playgroud)
这是一种非常常见的方法.它也在这里讨论:http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/
我知道如何在文件加载和执行后收到通知
我不知道的是,如果Javascript源文件的链接被破坏,我该如何得到通知.
谢谢
我有多个<head>外部js和css资源的引用.大多数情况下,这些都适用于第三方分析等.不时(传闻),这些资源无法加载,通常会导致浏览器超时.当外部JavaScript或CSS资源无法加载时,是否可以检测并登录服务器?
我正在考虑某种类型的延迟加载机制,当失败时,将调用一个特殊的URL来记录此失败.有什么建议吗?
我认为发生了什么:
用户点击我们的页面,服务器端成功处理并提供页面
在客户端,HTML标头尝试连接到我们的第三方集成合作伙伴,通常是以"http://www.someothercompany.com ..."开头的javascript包含.
另一家公司无法处理我们的负载或者有很多工作时间,因此连接失败.
用户看到一个通用的IE Page Not Found,而不是我们服务器中的一个.
因此,即使我的网站已启动且其他所有内容都正常运行,只是因为这个调用第三方服务器失败了,一个在HTML页面标题中,我们完全无法启动.
我试图将事件的事件处理程序onerror(404错误)附加到<link>元素.
我的页面上有这样的内容:
<link rel="stylesheet" type="text/css" href="dead/link.css" onerror="handle404Error()" />
Run Code Online (Sandbox Code Playgroud)
它适用于Chrome和Opera,但它也适用于IE9 +.我找到了这个,但我自己找不到解决方案.
有没有办法做到这一点,而无需编写额外的方法来动态加载样式?
注意:我没有用'jquery'标记这个问题,所以请不要在你的答案中使用它.
我想检测脚本标记(动态创建并添加到DOM)是否无法加载.onerror事件有效,但Firefox中的file:// URL除外.
不幸的是没有任何的技术在这里描述的(除了超时,这是我不能接受的情况下),似乎在Firefox中工作,如果脚本标签的src是一个文件:// URL(或相对URL和页面被通过文件加载: //网址)
测试用例:
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'doesnotexist.js');
script.onerror = function() { alert("Loading failed!"); }
document.getElementsByTagName('head')[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)
将其加载到带有file:// URL的HTML页面中.onerror事件不会在Firefox中执行.从网络服务器或Safari或Chrome加载,它会.
这对我来说似乎是个错误.有没有任何已知的方法呢?
我正在加载一个使用回调函数的外部脚本,它返回一些特定的数据.如果未收到此数据,则应显示错误.
这是我做的代码:
<script>
//setting initial state so that function will only work once
var visitors_loaded=false;
var my_callback = function( data ) {
if (visitors_loaded) return 0;
if (data) {
//success: callback function is called and it has a proper data
visitors_loaded=true;
alert(JSON.stringify(data));
}
else alert ('error'); //something went wrong
};
</script>
<script onload="my_callback(null)" onerror="my_callback(null)"
src="https://api.clicky.com/api/stats/4?site_id=32020&sitekey=9a19b1a4d1171193&type=visitors&date=this-month&output=json&json_callback=my_callback"></script>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的......很多东西可能会出错,所以我自然会添加一个onerror事件.如果您将脚本的主机名或域更改为不存在的内容,则会发生此错误事件.
但是,如果您只更改脚本的URL,它仍然可以连接到服务器并激活onload事件.我的回调函数不会被调用那些无效的请求,所以我也添加了一个onload处理程序.
现在的问题是,如果所有正常加载并返回数据,它将同时触发回调函数和onload.我注意到在onload之前触发了回调函数并设置了visitor_loaded变量,以便只调用一次处理函数.
到目前为止,它在JS小提琴和我的离线网站中完美运行,但我想知道这是否是预期的行为?在onload处理程序之前,json_callback函数是否总是优先?
我想检查是否可以使用 JavaScript 函数访问服务器。
通过reachable,我的意思是,如果服务器应答,我不在乎哪个HTTP 状态代码,它是可达的。
Stackoverflow/Google 帮我实现了这个功能:
function check(target)
{
var xhr = new XMLHttpRequest();
var target = "https://"+target+"/index.php";
var num = Math.round(Math.random() * 10000);
xhr.open("HEAD", target + "?num=" + num, true);
xhr.send();
xhr.addEventListener("readystatechange", processRequest, false);
function processRequest(e)
{
if (xhr.readyState == 4)
{
if (xhr.status !== 0)
{
return true;
}
else
{
return false;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果目标允许与Access-Control-Allow-Origin: *(或特别是客户端)进行操作,则效果很好。但事实并非如此。
我遇到了许多解决方案,它们似乎都依赖于此。
如何Access-Control-Allow-Origin使用 JavaScript独立于服务器上的设置检查服务器是否可访问?
编辑:我只是想补充一点,我无法修改目标(例如更改标题),但我能够识别应该可用的资源(例如https://target/this-specific-site.php )
编辑2: …