场景:js等静态资源存储在七牛云服务器;使用seajs加载静态资源。
存在问题:IE8对ajax跨域做了限制,在服务端不对跨域请求单独处理的情况下,在seajs中ajax无法获取到远程js文件的内容。
解决:修改seajs-wrapper-debug文件,首先去七牛请求静态资源,如果请求失败,再由应用服务器加载静态资源。采用这种方式同时能够解决,七牛服务器因为欠费等其它问题down机的问题,保证静态资源请求的稳定性。
// Helpers function xhr(url, callback) { //var r = global.ActiveXObject ? // new global.ActiveXObject("Microsoft.XMLHTTP") : // new global.XMLHttpRequest() ; //modified , 解决ie10跨域加载js问题。首先使用XMLHttpRequest,ActiveXObject是ie7之前版本 var r = global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject("Microsoft.XMLHTTP") ; try{ r.open("GET", url, true) ; }catch (e){ return failoverxhr(url, callback) ; } r.onreadystatechange = function() { if (r.readyState === 4) { // Support local file if (r.status > 399 && r.status < 600) { failoverxhr(url, callback) ; }else { callback(r.responseText) } } } //发送请求结果 var result = null ; try{ result = r.send(null) ; }catch (e){ return failoverxhr(url, callback) ; } return result ; } /** * 静态资源请求失败的处理 */ function failoverxhr(url, callback){ var r = global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject("Microsoft.XMLHTTP") ; url = getLocalAppUrl(url) ; console.log("use backup "+url); r.open("GET", url, true) ; r.onreadystatechange = function() { if (r.readyState === 4) { // Support local file if (r.status > 399 && r.status < 600) { seajs.emit("failover error", { uri: url , status: r.status }) ; }else { callback(r.responseText) } } } return r.send(null) ; } /** * 由本项目中获取请求的url */ function getLocalAppUrl(resourceURL) { //获取静态资源的uri var urlReg = /\/resources.*/ ; var uri = urlReg.exec(resourceURL) ; //如果配置了项目的url,则有url中请求静态资源 if(uri && window.resourceConfig && window.resourceConfig.path){ uri = window.resourceConfig.path + uri ; } return uri ; }
相关推荐
6. **兼容性**:SeaJS 兼容多种浏览器,包括老版本的 IE,使得其能在广泛的应用场景下稳定运行。 7. **调试友好**:压缩版本(如 sea.js)和调试版本(如 sea-debug.js)提供,方便在生产环境和开发环境之间切换,...
- **广泛的浏览器兼容性**:Sea.js 支持 Chrome 3+、Firefox 2+、Safari 3.2+、Opera 10+、IE 5.5+ 等多种浏览器,包括移动端浏览器。 #### Sea.js 配置 Sea.js 提供了一系列配置选项,以满足不同场景下的需求。 -...
这里是seajs loader的核心部分,有些IE兼容的部分还不是很明白,主要是理解各个模块如何依赖有序加载,以及CMD规范。 代码有点长,需要耐心看: 代码如下: /** * The core of loader */ ;(function(seajs, util, ...
方法:借鉴底线库的工具框架,包含一些常用方法,在兼容AMD模式的同时,兼顾了CMD# 下载依赖$ npm install# 开发环境(开启本地热服务)$ npm run start# 生产环境(输出压缩后代码)$ npm run product博客日期2016-10-18...
- **兼容性**:适用于多种浏览器,包括IE6+,适应各种项目需求。 **4. 整合JavaScript代码** 整合JavaScript代码通常涉及以下步骤: 1. **配置sea.js**:设置基础路径、模块别名、预加载模块等,通常在HTML文件中...
初衷是为移动端开发,所以不兼容ie系列虽然本代码是练习学习的作品,但已经有两个线上的小项目在用,在以前的公司待着的时候用的,不过看了下微信服务号里已经没有这两个选项了,所以地址就不发了,说下名字吧。...
layui对主流浏览器有良好的兼容性,包括IE8及以上的版本。同时,layui优化了代码结构和资源加载策略,确保了系统的高性能运行。 8. 开发与调试: 使用此模板系统时,开发者可以借助layui的debug模式进行问题排查...
节点 一个强大,高效,易于使用,有趣JavaScript模板引擎。为什么要使用nodetpl?...从入门到精通仅10分钟良好的兼容性:与所有主流浏览器,IE,Firefox,Chrome,Safari等兼容好评:超过200个站点选择nodetpl作为
- 描述了元素的宽度和高度计算方式,包括边框、内边距和外边距,IE8以下版本的盒模型与标准有所不同。 17. **元素类型**: - 块级元素如`div`、`ul`等占据整个容器宽度,行内元素如`a`、`span`则按照文本流排列,...
SeaJS提供的`styleOnload`函数,为开发者提供了一个跨浏览器兼容的解决方案。该函数首先尝试为IE浏览器绑定`onload`事件。如果浏览器不是IE系列,则通过`setTimeout`来启动一个轮询函数`poll`,该轮询函数会在一定的...