你现在的位置 -> javascript

Javascript与SWF交互

星期四, 七月 1st, 2010

最近在做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(“*”);

document、 location、body 属性方法

星期三, 六月 23rd, 2010

document:属性 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);
},
[...]

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数组的灵活性为程序带来了很多的方便,可以利用这些特殊的方法使程序更加容易阅读,更加灵活。

javascript教程-变量与作用域

星期一, 四月 27th, 2009

自己也已经写了好久javascript但是觉得很混乱,所以将自己熟悉的一些东西用教程的方式记录下来。一方面可以加深记忆,另一方面可以与大家分享,共同勉励。
1. 变量
javascript采用的是一种匿名声明的方法。即不需要事先声明变量,可以程序里即使即用。如:
i=1;j=2;
alert(i+j);
结果alert出3。
这种使用方法很灵活,但是也很危险。因为匿名声明的所有变量都会是全局变量。这样你的所有javasciprt片段或文档都可以引用这一变量。
同时你可以用var关键字来进行变量声明这样所声明的变量会作为局部变量,与全局变量不同的是局部变量在于不同的作用域。
1.2 变量的作用域
JavaScript中的函数是基于静态作用域(也叫词法lexical作用域),而不是动态作用域。这句话的意思是JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。在一个静态作用域里,变量永远指向它的最顶层作用域。这是程序文本(program text)的一个属性并且与运行时调用的堆栈无关。因为匹配变量的作用域仅仅只需要分析程序文本即可,这样的作用域我们叫作静态作用域(lexical scoping)
e.g.1
function f1() {
var a = 20;
return function () { alert(a); }
}

var b = f1();
b();
结果:20
e.g.2
function f1() {
var a = 20;
return f2
}

function f2() {
alert(a);
}

var b = f1();
b();
结果:undefined
在程序1里一个匿名函数b()被声明时,变量a已经被保存在作用域里。所以得到20.但是在程序2里在函数f2()里,没有声明变量a所以没有任何值。
一但函数被定义,它会“记住”它的作用域与作用域链。这也并不是意味着函数里的所有变量都是这样。正好相反,你可以任意的添加、修改和删除。函数里都会保存最新的变量。但是必须知道变量是什么时候被定义而并不是这个作用域里它什么时候包含的。
静态作用域的几个特点

在程序里特殊地方定义的变量永远指向具有相同定义的变量,即程序每次执行时被执行函数所在的作用域里相同定义的变量
变量是可以通过静态检查(static examination)源码中的作用域里出现的标识符(var)来将其值(value)改变的,而不是把整个函数做为一个整体来执行。

其实总结起来就是javascript特有的链式作用域,这样的链式特点在javascrit里非常重要。jQuery与prototype就是最好的应用javascript链式反应例子。
看代码:
var [...]

分类

随机作品

GlobalMarket

GlobalMarket.com Web Design

YATAO Express

YATAO的电子杂志

消失的神族

Photoshop CS3

Wacom

wpg group