动态添加script标签引入jQuery时,发现的引用地址访问命中率比较低引发的两个问题

hackthissite 2015-07-28 11:05:50
因为某项需要,只能从外部引入Jquery对象,我的思路是在被引入页面动态创建script标签,引入jQuery。
假定引用的jQuery地址是:http://absdfc.def.com/jquery-1.8.2.min.js ,代码示例如下。

运行后发现存在这个问题:
1,引用的jQuery地址,有时候直接访问失败。也就是说,动态创建的引用也会失败。
2,如果失败了,那么:
2.1 chrome控制台中提示ERR_CONNECTION_REFUSED。
2.2 ie 11控制台中不显示错误,查看页面源文件,script标签已动态创建。另外,此时可以确定引用地址不可访问。
2.3 可以确定出错的地方为
document.getElementsByTagName('head')[0].appendChild(domScript);

我试了一下,try catch这个语句,也无法处理异常。

我的问题是:
有没有别的办法,在第一个jquery引用地址不可用的时候,自动切换到第二个引用地址呢?
不要建议我直接引用本地的jQuery,项目不允许。

请达人不吝赐教!


附代码:
 

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
<script>
(function() {
if (!window.jQuery) {
var url2 = "http://absdfc.def.com/jquery-1.8.2.min.js";
f_loadS(url2)
} else {
var q = 12;
}
})();


function f_loadS(url, success) {


var domScript = document.createElement('script');

domScript.src = url;
success = success ||
function() {};
domScript.onload = domScript.onreadystatechange = function() {
if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
success();
this.onload = this.onreadystatechange = null;
}
};
document.getElementsByTagName('head')[0].appendChild(domScript);

}
</script>
</head>
<body>


</body>

</html>
...全文
207 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
离子漂浮物 2015-07-28
  • 打赏
  • 举报
回复
好吧,是我看错题目了。 既然你知道出错的位置你可以用try 来跳过出错,并在出错时作别的处理,如:

		try {
    	document.getElementsByTagName('head')[0].appendChild(domScript);       
        } catch (e) {
			//也可以在这里加个记数器,这样你就可以用一个数组将你准备好的地址列表出,通过记数器里的数字进行切换,如:
			/*
				f_loadS(urlarry[urlindex++], success)
				urlindex声名成全局变量就行了
			*/
			f_loadS("下一个url地址", success)
        }
离子漂浮物 2015-07-28
  • 打赏
  • 举报
回复
你的代码运行后的结果,应该能看得出你出错的原因。   <!DOCTYPE html> <html> <head> <meta charset="utf-8 /> <title>JS Bin</title> <script> (function() {     if (!window.jQuery) {         var url2 = "http://absdfc.def.com/jquery-1.8.2.min.js";         f_loadS(url2)     } else {         var q = 12;     } })();        function f_loadS(url, success) {             var domScript = document.createElement('script');       domScript.src = url;     success = success ||     function() {};     domScript.onload = domScript.onreadystatechange = function() {         if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {         success();             this.onload = this.onreadystatechange = null;         }     };     document.getElementsByTagName('head')[0].appendChild(domScript);          }     </script><script src="http://absdfc.def.com/jquery-1.8.2.min.js"></script> </head> <body>       </body></html>
DaveLeeCN 2015-07-28
  • 打赏
  • 举报
回复
你可以在引入jQuery后调用其中的方法测试一下,如果有这个方法或者该方法返回正确的值,那么就是引用成功,否则就是失败了,but,在这个时间里页面元素和其他js大概已经加载完成了,这个时候还能调用jQuery中的方法吗?

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧