最近在做Flash与Javascript上传控件,但是发现Flash还真是问题多多,现在总结一下,留备忘,有些是网上找来的,已经不知道作者是谁了… …
Javascript和swf在网页中交互一般可有以下几种情况:
1.swf和这些调用的javascript在同域
2.swf和这些调用的javascript在不同域,比如加载远程的swf然后call别地方的服务
对于swf跨域call服务的问题,可同过crossdomain.xml配置解决。
但对于加载远程的swf,默认情况下,根本不能将里面的方法成功注册为向javascript公开的方法,一般会报此类错误:
a) SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface ,调用者 remote.com/test.swf(所加载的远程swf) 不能访问 127.0.0.1(本机的一个服务)
at flash.external::ExternalInterface$/_initJS()
at flash.external::ExternalInterface$/addCallback()
…
b) 错误: uncaught exception: Error calling method on NPObject! [plugin exception: Error in Actionscript. Use a try/catch block to find error.]
解决办法
对于a错误,是因为远程的swf加载到本地后没有权限去访问当前html文档,对于这个我们只需要在输出swf的时候设置 allowScriptAccess 属性,一般设置为always.即可解决。
对于b错误,是因为默认actionscript中不允许向将方法注册到不同域的 html文档中, 对于这个我们只需要在as中加一下代码即可解决:
import flash.system.Security;
Security.allowDomain(“*”);
Security.allowInsecureDomain(“*”);
Javascript与SWF交互
星期四, 七月 1st, 2010document、 location、body 属性方法
星期三, 六月 23rd, 2010document:属性 document.title //设置文档标题等价于HTML的<title>标签 document.bgColor //设置页面背景色 document.fgColor //设置前景色(文本颜色) document.linkColor //未点击过的链接颜色 document.alinkColor //激活链接(焦点在此链接上)的颜色 document.vlinkColor //已点击过的链接颜色 document.URL //设置URL属性从而在同一窗口打开另一网页 document.fileCreatedDate //文件建立日期,只读属性 document.fileModifiedDate [...]
[jquery]find与filter的应用
星期三, 四月 14th, 2010.find()
Description: Get the descendants of each element in the current set of matched elements, filtered by a selector.
查找子元素,反回一个新的jQuery Object,与.children()选择器相同,而两个选择器唯一不同的是.children()只能返回一个级别的元素。
e.g.
<div id="t1" class="demo1"><div class="demo2"><div class="demo3"></div></div>
</div>
$("#t1").children(); //return [div.demo2]
$("#t1").find("div"); //return [div.demo2, div.demo3]
$("#t1").children(".demo3"); //return []
.fliter()
Description: Reduce the set of matched elements to those that match the selector or pass the function’s test.
对选择元素的子集,进一步筛选。正如其名一样fliter,是一个过虑嘴。
这里有个问题,还是Ajax加载HTML的问题
一个远程的HTML
用Ajax加载
$.get({ url: "test.html",function(data){
var $d=$(data);
var $filter = $(data).filter(".ajaxpage");
var [...]
[jQuery]当$遇上HTML
星期三, 四月 7th, 2010$是jQuery里最常用的符号(当然其他类库也喜欢用$,可能看到后就想到Dollar),在jQuery里的含义非常广泛,详见jQuery()
今天用Ajax返回HTML时遇到一个$(html)的问题,顺便看了一下jQuery处理HTML的方法。
$.get({ url: "test.html",function(data){
var $d=$(data); }});
这样得到的$(data)是一个数组(NodeList类型)
如果是正常的data应该是一个HTML
jQuery是怎么去掉那些多余的HTML代码的呢?
从jQuery的源码可以看出,当$()里面包含了一个String类型的参数,就会判断是否需要添加或者重构。
重构的代码:
ret = buildFragment( [ match[1] ], [ doc ] );
在buildFragment里面jQ用createDocumentFragment的方法重建了HTML文档也是清理的第一步。
然后又一翻天书(正则)去空格与调整为全是小写字母后,到了关键一步。
这里jQ用了一个比较有趣的方法来清理HTML
截取部分代码:
var div = context.createElement("div");
// Go to html and back, then peel off extra wrappers
div.innerHTML = elem //html document
div.childNodes;
这个方法可真是太爽了,直接用div里面包含整个HTML文档,然后用childNodes的方法直接把HTML文档直接转换为NodeList类型,并且轻松的去除了其他额外的标签。
然后:
fragment.appendChild( ret[i] );
这样只需要刷新一次DOM结构就可以把HTML文档处理的比较干净,里面不仅包含了body里面的所有DOM元素而且还包含meta与title等有用信息当然jQ有对script与style标签特殊处理,这里就不说了。
jQuery用的一种思想来写代码,这种思想与Google的页面没有</body></html>很相像,学习与理解标准的路还很漫长,我还是继续努力吧~哈哈
推荐一篇文章Lifesinger对Google首页代码的分析,看后肯定让你受益匪浅的。而他本人那种研究与探索的精神更值得我们学习,向勇于挑战的人们致敬!
Study jQuery in a Simplified Way [转载]
星期二, 二月 23rd, 2010转载自:岁月如歌
源文地址:http://lifesinger.org/blog/2010/01/study-jquery-in-a-simplified-way/
学习复杂代码的最好方法是简化:
(function(win, undefined) {
var jQuery = function(selector, context) {
// jQuery 对象就是 init 函数的一个实例
return new jQuery.fn.init(selector, context);
},
[...]
关于jQuery 不同选择器的性能比较[翻译][转载]
星期四, 十一月 26th, 2009原文:101 on jQuery Selector Performance by Andreas Grabner, Nov 09, 09
译文:关于jQuery 不同选择器的性能比较 by Unmi
上周我认真分析了一个 Web 页面,它在 onLoad 事件中处理一段定制脚本文件用了 4.8 秒。结果是其中 2.8 秒消耗在动态菜单库上(将会在博客中单独记录),剩下的 2 秒花费在 jQuery 的选择器上。分析显示多数选择器不返回任何对象,而那些会返回对象的选择器可考虑用不同的选择器来改善性能。
关于 jQuery 选择器
有大量的日志文章论述了 jQuery 选择器及它们的性能影响。正如你所知,可以通过 ID, TagName 或 ClassName 选择元素。依赖于不同的选择器, jQuery 会使用浏览器本地方法,如 通过 ID 或标签来选择元素,或者在使用类名选择时须手工从 DOM 中遍历获得元素(因为在 IE 中不存在相应的 getElementsByClssName).
分析我的页面时间中这 2 秒
在 onLoad 处理器中对页面中某些特定的元素使用 jQuery 设置为隐藏,显示或改变样式表…。这里是一个代码片断:
onLoad 中的 jQuery 脚本样例
在 onLoad [...]
javascript正则
星期三, 九月 30th, 2009以下是非常完整的正则教程,所以我就不再罗嗦了,想学习相关知识请点:
一篇非常详细的正则入门
目录
本文目标
如何使用本教程
正则表达式到底是什么东西?
入门
测试正则表达式
元字符
字符转义
重复
字符类
分枝条件
反义
分组
后向引用
零宽断言
负向零宽断言
注释
贪婪与懒惰
处理选项
平衡组/递归匹配
还有些什么东西没提到
联系作者
最后,来点广告……
网上的资源及本文参考文献
更新纪录
javascript正则使用–详细讲解了一下正则在javascript中的应用
Friends Links上线
星期一, 六月 15th, 2009经过N久的制作大部分时间花在研究Google Feed Api上,Friends Links正式上线。
本站也学习welee同学的Links,本站不进行交换连接,纯粹为友情链接。
只在你在本站留言就有机会都会出现在Links里面并且会Feed一篇你的网站最新日志。
由于现在对Google Feed Api的运用还不是很熟练所以会有些小Bug,会一步步修复下去。并且会在相对成熟后把原理与源码与大家分享。
谢谢大家支持,呵呵。
2009-6-15
最近发现Google Feed Api被墙!
由于一直在做Friends Links所以用了Google Feed Api,已经接近完工时,却发现在最近Feed Api很不稳定,经常不能访问。
由于客户端用户可能访问了敏感关键字,于是Feed Api就无法访问,但是过一段时间又恢复访问,对于我这种以第三方托管类库来说,是一种致命的打击!
但是已经制作98%的程度,也不能放弃啊,先放上来用着吧,如果大家看到了一直loading说明Feed里很可能有敏感关键字或你曾经在这段时间里访问过这类的关键字。
2009-12-9
由于疏于管理与Google Feed Api时好时坏,暂时先关闭。
javascript-函数
星期四, 五月 14th, 2009什么是函数
函数是一组可以随时随地地运行的语句。
函数是ECMAScript的核心。
函数是由这样的方式进行声明的:关键字function、函数名、一组参数,以及置于括号中待执行的代码。
(以上来自己ECMAScript)
匿名函数
匿名函数在javascript里非常常用,也是非常有用的。
function(a,b,c){
return (a+b+c);
}
使用方法
var total=function(a,b,c){
return(a+b+c);
}
alert(total(1,2,3));
还要以这样被使用
/*other one*/
var total=function(a,b,c){
return(a+b+c+);
}(1,2,3);
alert(z);
以上两种方法结果相同。
第二种方法比较其实就是函数做为表达式的一种使用方法,是javascript函数调用的一种方式。
alert("你好!");
(alert)("你好!");
这样就比较好理解了,alert是javascript最常见的函数之一了,他本身是一个函数所以,可以用函数做为表达式方法进行调用。
函数作为参数
这个不是什么新鲜的东西,但是非常有用
var containter=function(func,a,b,c){
return func(a,b,c);
}
var total=function(a,b,c){
return(a+b+c);
}
alert(containter(total,1,2,3));
函数式概念
javascript应用至今,最重要的应该是用它来做Web app,所以很多人对其强壮性提出质疑,但是同时很多人也在努力的将javascript套用各种编程风格使其更通用、更强壮、更容易维护。
而函数式的概念相对而言比较重要
函数不总是需要名称。
函数可以像其他值一样分配给变量。
函数表达式可以编写并放在括号中,留待以后应用。
函数可以做为参数传递给其他函数
这一概念总结来自IBM
这里再引用他的一个例子说明一下
生成动态HTML的能用方式:
Array.prototype.fold=function(templateFn) {
var len=this.length;
var str=’ ‘;
for (var i=0 ; i<len ; i++)
str+=templateFn(this[i]);
[...]
javascript教程-数组
星期天, 五月 10th, 2009前面讲过一次关于变量的教程,变量属于离散值。如果某个变量是离散的。它在任意时刻就只有一个值。如果想用一个变量来存储一组值,就需要使用数组(array)。
javascript里面数组要用关键字Array声明如下:
var aTest=Array(4);
var aTest=Array();
var aTest=Array("this is a","b","c");
var aTest=["this is a","b","c"];
var aTest=["this is a",123,false];
以上声明都是正确的,但是声明Array是个好的编程习惯。在这里可以看到,javascript数组跟声明变量是一样的,非常灵活,数组元素不必是字符串,也可以存入布尔值或是数组甚至是变量。
如果想要获得数组的元素,同样简单,只需标明下标,即可取得相应的元素。
var aTest=Array();
aTest[0]=’a';
aTest[1]=’b';
var temp=aTest[0];
alert(temp);
结果为a。这里需要注意的是数组的下标默认是从0开始而不是1。
关联数组
如果填充数组时只给出了元素的值,这个数组就将是一个数值数组,它的各个元素的下标将被自动创建和刷新。
当然这里有一种特殊的方法,就是填充时我们为每个新元素指定下标,便于读取,并且这种下标不一定是数字,可以是字符串。
var preson=Array();
preson["name"]="Will";
preson["age"]="20";
preson["location"]="American";
这称为关联数组(associrative array)。其实每个数组都可以看做是关联数组因为数组的每个下标都应着相应的元素,虽然这些都是系统自动生成的数字。所以数值数组可以看做关联数组的一个特例来看待。
关联数组的好处在于,可以通过数组的名字来访问数组元素,这样大大提高了数组的可读性。
二维数组、多维数组
在javascript里是没有这个概念的。其实在javascript里数组已经非常的灵活,上面也提到过,数组的元素可以是数值、字符串、布尔值甚至是数组。
e.g.实现如下数组
1
2
3
4
5
6
var darry=Array();
darry[0]=[1,2,3];
darry[1]=[4,5,6];
alert(darry[0][1]);
alert(darry[1][1]);
但是,千万不能用darry[0][0]=1这样来赋值,这是完全错误的。
我们再做一个更加灵活的实验。
现在我要用一个关联数组来实现特殊的二维数组。
e.g.用数组来实现Beyong乐队(我最喜欢的乐队)的成员
var beyond=Array();
var members=Array();
members["leadsinger"]="黄家驹";
members["guitarist"]="黄贯中";
members["bassist"]="黄家强";
members["drummer"]="叶世荣";
beyond["vocallist"]=members;
这样,现在beyond["vocallist"]["leadsinger"]其值为黄家驹,beyond["vocallist"]["guitarist"]值为黄贯中。
javascript数组的灵活性为程序带来了很多的方便,可以利用这些特殊的方法使程序更加容易阅读,更加灵活。


