shawl.qiu 脚本跨域类... sqCrossDomain v1.0
说明:
首先...要声明的是, 实现 js 绝对跨域是不可能的,
不过本类确实实现了跨域.
用 iframe , object 标签, 我是弄过N次了, 还改写了某些方法, 死活就是不行.
最后嘛, 一个常见现象大家可能忽略了.
.js 文件不就是可以跨域使用的么...当然这个就只能用在某些预定内容上了, 但这个对我来说刚好有用.
如果你想实现HTML页跨域, 那应该用服务端技术...不过也可以使用本方法进行跨域, 只是比较麻烦一些, 需要先单独做一个调用页把内容转换成JS内容.
扯正题:
本类要实现的就是从不同域加载某一文件 , 可以是 .js, .txt *.文本文件 里加载内容.
内容是一个 js 变量, 变量的内容嘛可就是千变万化了..
原理嘛, 是这样滴:
首先你要确定你有一个文本文件, 里面放着一个 js 变量和其内容.
然后使用 DOM 动态创建 script 标签, 再使用 setInterval 检测那个 js 变量, 如果不为空则加载完毕, 如果超过预定时间, 则显示超时...
看源码吧, 说着累.
shawl.qiu
2007-05-10
http://blog.youkuaiyun.com/btbtd
目录:
1.文本文件 local_playlist1_script.txt
2. 类 sqCrossDomain v1.0
下载:
http://files.myopera.com/btbtd/javascript/sqCrossDomain_v1.0.7z
内容:
1.文本文件 local_playlist1_script.txt
- var ScriptText =
- "Donna Lewis[I Could Be the One]|"+
- "/sqMusicPlayer/mp3/[I Could Be the One][Donna Lewis][blue planet].mp3||"+
- "The Cranberries[Never Grow old]|"+
- "/sqMusicPlayer/mp3/[Never Grow old][The Cranberries][Wake Up And Smell The Coffee].mp3||"+
- "Tomohisa Okudos[Always With Me]|"+
- "/sqMusicPlayer/mp3/[Always With Me][Tomohisa Okudo][幸福的味道].mp3||"+
- "同船过渡[Love Is... 2]|"+
- "/sqMusicPlayer/mp3/[11·Love Is... 2][同船过渡][Unknown].mp3||"+
- "Standfase[no longer]|"+
- "/sqMusicPlayer/mp3/standfast-nolonger.mp3||"+
- "M2M[Pretty Boy]|"+
- "/sqMusicPlayer/mp3/[Pretty Boy][M2M][Shades Of Purple].mp3||"+
- "Allison Krauss[When You Say Nothin At All]|"+
- "/sqMusicPlayer/mp3/[When You Say Nothin At All - A][Allison Krauss][The Other Sister soundtrack].mp3||"+
- "Sweet[爱是怎么一回事]|"+
- "/sqMusicPlayer/mp3/[爱是怎么一回事(华视舞动奇迹片蝅[Sweet][We ll Go On the Stage].mp3||"
- ;
- //TextGlobal = Text;
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <!-- DW6 -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- <script type="text/javascript" id="SptTest">
- //<![CDATA[
- /*-----------------------------------------------------------------------------------*/
- * shawl.qiu sqCrossDomain class v1.0
- /*-----------------------------------------------------------------------------------*/
- //---------------------------------begin class sqCrossDomain()-------------------------------//
- function sqCrossDomain()
- { // shawl.qiu code
- //------------------------------------begin public variable
- //---------------begin about
- this.auSubject = 'shawl.qiu sqCrossDomain class';
- this.auVersion = 'v1.0';
- this.au = 'shawl.qiu';
- this.auEmail = 'shawl.qiu@gmail.com';
- this.auBlog = 'http://blog.youkuaiyun.com/btbtd';
- this.auCreateDate = '2007-5-10';
- //---------------end about
- this.Interval = {};
- this.Interval.Ms = 100;
- this.Interval.Limit = 10000;
- this.Interval.Count = 1;
- this.Interval.Temp = 0;
- this.Interval.Func = null;
- this.Script = function(){};
- this.Script.Url = "";
- this.Script.ID = "SptTextId";
- this.Identifier = function(){}
- this.Identifier.VariableName = "";
- this.Prefix = "SADFkljkjfaksdskkk";
- this.CallBack = null;
- this.Error = null;
- this.Go = fGo;
- //------------------------------------end public variable
- //------------------------------------begin private variable
- var Tl = this;
- //------------------------------------end private variable
- //------------------------------------begin public method
- function fGo()
- {
- if(!Tl.CallBack)
- {
- alert("回调函数不能为空!");
- return;
- } // end if
- if(Tl.Script.Url=="")
- {
- alert("路径不能为空!");
- return;
- }
- var EleHeadSet = document.getElementsByTagName("head");
- if(EleHeadSet.length==0)
- {
- alert("Head 标签不存在, 操作无法进行!");
- return;
- }
- var EleHead = EleHeadSet[0];
- var EleSpt = document.createElement("script");
- EleSpt.src = Tl.Script.Url;
- EleSpt.id = Tl.Script.ID;
- EleHead.appendChild(EleSpt);
- Tl.Interval.Func =
- setInterval
- (
- function()
- {
- var sTemp = ""
- try
- {
- sTemp = eval(Tl.Identifier.VariableName);
- }
- catch(e)
- {
- sTemp = "";
- }
- defaultStatus = "空值: "+(sTemp=="")+" | 尝试加载次数: "+Tl.Interval.Count++;
- Tl.Interval.Temp += Tl.Interval.Ms;
- if(sTemp!="")
- {
- clearInterval(Tl.Interval.Func);
- Tl.CallBack(sTemp);
- }
- if(Tl.Interval.Temp>=Tl.Interval.Limit)
- {
- clearInterval(Tl.Interval.Func);
- defaultStatus = "加载超时!";
- alert("超时");
- }
- }
- ,
- Tl.Interval.Ms
- );
- } // end function fGo
- function fFunc()
- {
- }
- function fError(sMsg)
- {
- }
- //------------------------------------end public method
- //------------------------------------begin private method
- //------------------------------------end private method
- } // shawl.qiu code
- //---------------------------------end class sqCrossDomain()---------------------------------//
- var Acd = new sqCrossDomain();
- onload =
- function()
- {
- Acd.Interval.Ms = 100;
- Acd.Interval.Limit = 10000;
- //Acd.Script.Url = "http://127.0.0.1:999/sqMusicPlayer/playlist/local_playlist1_script.txt"
- Acd.Script.Url = "http://shawl.qiu.googlepages.com/local_playlist1_script.txt"
- //Acd.Script.Url = "http://files.myopera.com/btbtd/sqMusicPlayer/PlayList/local_playlist1_script.txt"
- Acd.Script.ID = "SptTextId";
- Acd.Identifier.VariableName = "ScriptText";
- Acd.CallBack = fCallBack;
- Acd.Go();
- }
- function fCallBack(str)
- {
- alert(str);
- }
- //]]>
- </script>
- </head>
- <body>
- </body>
- </html>