2008年11月13日星期四

扩展jQuery跨域加载js文件

众所周知ajax中的同源策略,不能够向其他主机发送ajax请求,在jQuery中提供了一个getScript()方法,可以获取远程js文件,并执行,但这一功能也具有同源性.由于前段时间工作需要访问其他服务器上的一个js文件中的数据,对该函数进行了一个扩展,希望能对使用jQuery的朋友有所帮助,代码如下://扩展jQuery加载跨域名js脚本
jQuery.extend(
{
/**
* @brief: 加载跨域名js脚本
* @param: 脚本URL
* @param: 加载完毕回调函数
*/
getScriptEx : function (jsurl, fCallback, fError)
{
var BROWSER_IE = window.navigator.userAgent.indexOf(\"MSIE\") != -1;
var SCRIPT_TIMEOUT = 20000;

if (typeof(fCallback) != \"function\") fCallback = new Function();
if (typeof(fError) != \"function\") fError = new Function();

var oScriptEl, oTimeoutHDL, oHead;
try
{
oScriptEl = document.createElement(\"script\");
oScriptEl.type = \"text/javascript\";
oScriptEl.language = \"javascript\";
oScriptEl.src = jsurl + \"?\" + Math.random();
oScriptEl.onreadystatechange = doCallback;

if (BROWSER_IE)
{
oScriptEl.onload = function()
{
this.readyState = \"complete\";
doCallback();
};
};

oTimeoutHDL = window.setTimeout(doError, SCRIPT_TIMEOUT);
document.getElementsByTagName(\"head\")[0].appendChild(oScriptEl);

}
catch(error)
{}

function doCallback()
{
try
{
if (oScriptEl.readyState == \"complete\" || oScriptEl.readyState == \"loaded\")
{
oScriptEl.onload = oScriptEl.onreadystatechange = new Function();
fCallback();
window.clearTimeout(oTimeoutHDL);
oScriptEl.parentNode.removeChild(oScriptEl);
}
}
catch(error)
{}
};

function doError()
{
try
{
oScriptEl.parentNode.removeChild(oScriptEl);
}
catch(error)
{}
};
}
}

没有评论: