/*
使用注意:
1. 被请求服务器必须在根目录存在crossdomain.xml文件,有关此文件作用/语法请搜索
2. 必须手动加载swfobject.js和jquery.js
3. 已经用队列方式解决swf没返回数据前被重载,swf加载前开始请求
4. 使用方法
_.命名空间({见代码中 defaultOps 属性});
5. 可以在加载本js前设置变量 _fajaxNameSpace = 'fajax2'; 来临时改变命名空间,在同一个页面需要加载多个swf时非常有用.
6. 请在body标签之内加载本js,因为要动态写入div,最好在body标签紧跟处写入,防止导致不平衡dom树,重新解析;
7. 在加载js前旋转变量 _fajaxSwfUrl = 'swf url 地址'; 即可加载临时swf
8. 在swf中添加了自定义超时事件进行扫尾工作,防止僵尸请求线程出现
9. 请不要重复加载jquery,否则本插件将会被冲掉而无法使用
*/
('object' != typeof _) && ('function' != typeof _) && (_ = {});//创建我的主命名空间 ( _ ) ,不使用jquery的,因为它会在第二次加载时,重载了jquery命名空间,导致本插件丢失了.
(('function' == typeof jQuery) || (alert('fajax需要先加载jquery.js库'), 0))
&& ( ('object' == typeof swfobject) || (alert('fajax需要先加载 swfobject.js库'), 0) ) &&
(function(nameSpace, swfUrl, $) {
if ('string' == typeof _fajaxNameSpace) {//临时改变本命名
nameSpace = _fajaxNameSpace;
_fajaxNameSpace = null; delete _fajaxNameSpace;
}
if ('string' == typeof _fajaxSwfUrl) {//临时改变swfurl
swfUrl = _fajaxSwfUrl;
_fajaxSwfUrl = null; delete _fajaxSwfUrl;
}
var error = function (txt) {
setTimeout(function() {//不清楚什么原因导致有时不能直接执行,必须得定时
throw new Error(txt);
}, 100);
}
if (!window._ || ('function' == typeof _[nameSpace]) ) return error('_.' + nameSpace + '命名空间已存在,不再重复加载');
var flashTip = '未能正常加载flash控件(用于不刷新页面跟服务器交互):'
+ '1. 可能是你的浏览器禁用了flash插件,解决方法是启用flash插件;'
+ '2. 可能是你未安装flash插件,解决方法是请点击本链接进入官网引导安装;'
+ '3. 可能flash插件损坏了,解决方法是制卸载后重新安装;'
+ '4. 如果需要我们帮助,你可以在论坛对应版块发贴或是联系我们;';
//不允许隐藏swf,在ie下,
//发现一个问题就是,动态加载css文件时,本swf会被重载,可以使用定时询问swf本queuei是否存在,不存在时,重新请求
var swfBox = '<a id="qidizi_' + nameSpace + 'Box" href="http://www.adobe.com/go/getflashplayer" title="' + flashTip + '" '
+ ' style="display:block;position:absolute;top:0px;left:0px;">'
+ '<img src="http://icon.chinahrd.net/image/get_flash_player.gif" alt="' + flashTip + '" />'
+ '</a>';
$.isReady ? $('body').html(swfBox) : document.write(swfBox);
var swfer = null;
var none = function(){};
var queue = {start:1, end:0};//队列
var swfIsReady = function() {
var _swf = $('#qidizi_' + nameSpace).get(0);
for (var startI = queue.start; startI <= queue.end; startI++) {//发送所有加载前的队列
_swf.request(queue[startI]);
}
return swfer = _swf;//防止在处理过程中出现新请求导致处理复杂化
};
var funcs = {
run:function (ops) {
var defaultOps = {
post:1 //post提交
,cache:0 //flash是否缓存
//,url:''//提交地址
//,header:{}//发送报头
//,data:{}//发送数据
//,ok:function(text){}//成功返回回调
//,fail:function (text, type) {}//失败回调
//,open:function(text) {} //开始下载事件
//,progress:function(text) {} //下载进度事件
//,httpStatus:function(text) {} //状态变化事件
//,timeOut:funciton(text){} //超时事件
};//默认设置
if (!/^https?\:\/\//i.test(ops.url)) return alert('不允许请求如下格式URL:\n' + ops.url + '\n fajax必须是http(s)协议的合法url');
ops.url = ops.url.replace(/#.*$/, '');//移除锚点
if (!/^https?\:\/\/.*\//i.test(ops.url)) ops.url += '/';//必须保证域名后面有/
if (!ops.cache) {//是否不允许缓存
ops.url += (ops.url.indexOf('?') > -1 ? '&' : '?') + '_rnd=' + new Date().getTime();
}
if ( ('object' != typeof ops.data) || $.isEmptyObject(ops.data)) ops.data = '';
else ops.data = '&' + $.param(ops.data);//前面加&防止flash直接的url + data而不自动检测前面是否有&
$.extend(defaultOps, ops);
defaultOps.index = ++queue.end;
queue[defaultOps.index] = defaultOps;//记录回调
swfer && swfer.request(defaultOps);//已经加载,立刻开始
}
,swfCall:function(asObj) {//成功返回
if (!asObj) return;
asObj.data && ( asObj.data = asObj.data.replace(/%22/g, "\"")
.replace(/%5c/g, "\\")
.replace(/%26/g, "&")
.replace(/%25/g, "%") );
switch (asObj.name) {
case 'open': //load 后
(queue[asObj.index].open || none)(asObj.data);
return; break;
case 'progress': //load 后
(queue[asObj.index].progress || none)(asObj.data);
return; break;
case 'httpStatus': //load 后
(queue[asObj.index].httpStatus || none)(asObj.data);
return; break;
case 'swfRequestOk'://调用swf的request成功
typeof swfRequestOk == 'function' ? swfRequestOk(asObj) : none(asObj);
return; break;
case 'swfIsReady'://swf加载成功
swfIsReady();
return; break;
default:
//alert(asObj.name);
}
var ok = queue[asObj.index].ok || alert;
var fail = queue[asObj.index].fail || error;
var timeOut = queue[asObj.index].timeOut || error;
queue[asObj.index] = null;
if (queue.start == asObj.index) {
do {
queue.start++;
delete queue[queue.start - 1];
} while(null === queue[queue.start]); //删除已空不连续属性
}
switch (asObj.name) {
case 'error': //runtime 错误
case 'securityError': //安全策略不允许
case 'ioError': //连接服务器时失败
fail.call(this, asObj.data, asObj.name);//失败
break;
case 'timeOut': //超时
timeOut(asObj.data); //ok的完成
break;
case 'complete': //加载完成
ok(asObj.data); //ok的完成
break;
}
}
,js:function(code) {//调试接口
eval(code);
}
};
_[nameSpace] = function (func, obj) {
if ('object' == typeof func) {
obj = func;
func = 'run';
}
if (!func) {
error('_.' + nameSpace + '的func参数必须提供');
return this;
}
if (funcs[func]) {
return funcs[func](obj)
使用flash解决js跨域问题源代码
4星 · 超过85%的资源 需积分: 32 106 浏览量
2013-03-28
10:56:05
上传
评论
收藏 14KB RAR 举报
qidizi
- 粉丝: 66
- 资源: 7
最新资源
- mmqrcode1714153659780.png
- Screenshot_2024-04-27-06-08-58-486_com.baidu.xin.aiqicha.jpg
- 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统+sql文件.zip
- 实训作业基于javaweb的订单管理系统源码+数据库+实训报告.zip
- 多机调度问题贪心算法基于最小堆和贪心算法求解多机调度问题.zip
- 基于同态加密技术的匿名电子投票系统源码.zip
- Pyqt5项目框架-PyQt项目开发实践
- 基于C通过MQTT的智能农业大棚管理系统(本科毕业设计)
- python+CNN的网络入侵检测算法源码.zip
- js 实现记住密码功能 js.cookie.min.js
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈