常用正则整理

一种简单的正则表达式验证工具:浏览器的地址栏!

输入javascript:/^\s*$/.test(” “); 回车后,得到true;

输入javascript:/^\s*$/.test(“0”); 回车后,得到false。

常用正则:

javascript:/^\s*$/.test(" ");
javascript:/^\d+$/.test("0123456789");
javascript:/^[1-9]\d*$/.test("1234567890");
javascript:/^- ( :\d+|\d{1,3}( :,\d{3})+)( :\.\d+) $/.test("-233,323,432.323456");
javascript:/^- ( :\d+|\d{1,3}( :\.\d{3})+)( :,\d+) $/.test("232.232.292,2533");
javascript:/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test("2008-11-29");
javascript:/^\d\d \.\d\d \.\d\d\d \d $/.test("11.29.2008");

email

8./^((([a-z]|\d|[!#\$%&'\*\+\-\/=\ \^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\ \^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a)) (\x20|\x09)+) (([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a)) (\x20|\x09)+) (\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\. $/i.test(email);

url

9./^(https |ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@) (((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\. )(:\d*) )(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*) ) (\ ((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\ )*) (\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\ )*) $/i.test(url);

参考:jquery.validate.js

JavaScript代码在IE和Firefox间的区别

1. HTML 对象的 id 作为对象名的问题

  IE:HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用

  FF:不支持

  解决方法:使用document.getElementById替代document.all

  2. 如果控件只有name,没有id, 用getElementById时:

  IE:可以找到对象

  FF:返回NULL

  解决方法:所有控件必须设置ID属性

  3. Evel:

  IE:支持,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象

  FF:不支持。

  解决方法:统一使用getElementById(idName) 代替 eval(idName)。

  4. Event:

  IE:用全局对象window.event

  FF:event只能在事件发生的现场使用,在调用函数时传入event对象

  解决方法:使用之前做一下浏览器类型判断,各用各的。

  5. 对象名称中美元符号‘$’改为使用下划线‘_’

  6. 集合类对象问题

  IE:可以使用()或[]获取集合类对象

  FF:只能使用[]获取集合类对象

  现有代码中存在许多,不能在 FF 下运行

  解决方法:统一使用[]获取集合类对象。document.form.item(“itemName”) 这样的语句改为document.form.elements[“elementName”]

  7. 变量名与某 HTML 对象 id 相同的问题

  IE:不能使用与 HTML 对象 id 相同的变量名

  FF:可以使用

  解决方法:在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。

  此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。

  8. Event定位问题

  IE:支持event.x 和event.y

  FF:支持event.pageX和event.pageY

  解决方法,统一使用event.clientX和event.clientY,但是在FF中event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。如果要完全一样,可以判断浏览器类型后对应使用。

  9. 父结点的问题

  IE:parentElement parentElement.children

  FF:parentNode parentNode.childNodes

  childNodes的下标的含义在IE和FF中不同,FF使用DOM规范,childNodes中会插入空白文本节点。一般可以通过node.getElementsByTagName()来回避这个问题。

  当html中节点缺失时,IE和FF对parentNode的解释不同,例如

 


 <form> 
<table
  <input/> 
</table> 
</form>

 

  IE:input.parentNode的值为空节点

  FF:input.parentNode的值为form

  FF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

  10. const 问题

  现有问题:

  IE:不支持 const 关键字。如 const constVar = 32; 在IE中这是语法错误。

  FF:支持

  解决方法:不使用 const ,以 var 代替。

  11. body 对象

  IE:在body标签完全被读入之后才存在

  FF:在body标签没有被浏览器完全读入之前就存在

  12. 自定义属性问题

  IE:可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性

  FF:只能使用getAttribute()获取自定义属性.

  解决方法:统一通过getAttribute()获取自定义属性

  13. event.srcElement问题

  IE:even.srcElement

  FF:even.target

  解决方法:使用时判断浏览器类型,各用各的。

  14. 模态和非模态窗口

  IE:支持模态和非模态窗口

  FF:不支持

  解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口。

  15. innerText

  IE:innerText

  FF:textContent

  16. 类似 obj.style.height = imgObj.height 的语句

  IE:有效

  FF:无效

  解决方法:统一使用obj.style.height = imgObj.height + ‘px’;

 

发现ajax的一个好站

发现ajax的一个好站,地址是:

http://ajaxian.com/

同时发现一篇好文,说的是在chrome,fiefox浏览器中,用拖拉的方式把文件

从桌面拖放到页面中就可以上传了

http://www.thecssninja.com/javascript/fileapi

使用<!–//–>这样的html注释把js代码注起来的作用

一直不明白用eclipse代码提示功能生成<script></script>代码块的时候,会使用<!– //–>这样的html注释把js代码注起来。之前在各大搜索引擎找寻答案一直未果,今天无意中在w3school看到了答案。真是那个柳暗花明什么什么的,在此记录一下。

如何与老的浏览器打交道

那些不支持 JavaScript 的浏览器会把脚本作为页面的内容来显示。为了防止这种情况发生,我们可以使用这样的 HTML 注释标签:

<html>
<body>
<script type="text/javascript">
<!--
document.write("Hello World!");
//-->
</script>
</body>
</html>

 

注释行末尾的两个正斜杠是 JavaScript 的注释符号,它会阻止 JavaScript 编译器对这一行的编译。

 

不过,现在还有浏览器不支持js吗?

JavaScript中<table>中<tbody>

浏览器总是在table和tr之间创建tbody标签。因此

<table>
    <tr>
        <td></td>
    </tr>
</table>

 

<table>
    <tbody>
        <tr>
            <td></td>
        </tr>
    </tbody>
</table>

 
在浏览器中够造的DOM树完全相同。

以上两个代码片段分别用IE DOM Inspector和firebug查看结果如下:

没有<tbody>时

     

                         IE DOM Inspecto                                                            firebug

 

增加<tbody>标签时,节点仍然没有变化

   
                          IE DOM Inspecto                                                            firebug

 

 
 

 
  

  • 大小: 21.9 KB
  • 大小: 16.5 KB
  • 大小: 19.4 KB
  • 大小: 16.3 KB

flexactionscript监听浏览器刷新后退关闭并且给出提示.(最精简方式调用)

一个as 类.

 

实现监听用户浏览器 刷新 后腿 和关闭. 并且给出提示

 

package com.thams.contextMenu.utils
{
	import flash.external.ExternalInterface;
	
	public class BeforeunloadManager
	{
		static private const javascript:XML = 
					<script>
					   <![CDATA[
						   function()
						   {				
							   var beforeunload = {
								   init: function () {
										window.onbeforeunload = beforeunload.onbeforeunload_handler;  
										window.onunload = beforeunload.onunload_handler;  
								   },
								  /**
									*  it will be called before Going to new page
									*/
									onbeforeunload_handler: function(){  
										var warning="离开本页面将丢失一切未保存的工作,确认退出 ";          
										return warning;  
									},
									onunload_handler: function() {
										var warning="谢谢光临23";  
										alert(warning);  
								   }
							   }
							   beforeunload.init();
						   }
					   ]]>
				   </script>;
		
		public function BeforeunloadManager()
		{
			return;
		}
		
		static public function regist() : Boolean
		{
			if (ExternalInterface.available)
			{
				ExternalInterface.call(javascript);
			}// end if
			return true;
		}
		
	}
}

 

调用示例.

 

只需要在你的application.mxml 的 初始化方法中加入这么一句

 

BeforeunloadManager.regist();

 

就可以了

 

 

注:

 

Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;

而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。Onbeforeunload 可以做到

 

本文两个都使用了. 在刷新前由用户确认. 刷新后.弹出信息. 您也可以写自己的业务.比如session注销等等!

 

javascript基础

一、

<!– [endif]–>样式规则基本格式

<!– [if !supportLists]–>1)



<!– [endif]–>头样式

<script type=”text/javascript” src=”123.js”>
</script>

<!– [if !supportLists]–>二、

<!– [endif]–>基本概念

钩子:理解为元素的
ID CLASS
用于脚本对某元素的操作

结构:
getElementByID(‘’) getElementByTagName(‘’)

<!– [if !supportLists]–>三、

<!– [endif]–>基本语法

<!– [if !supportLists]–>1)



<!– [endif]–>基础知识:区分大小写、语句分号(
if
语句不加分好
单行
if
语句可不加{})

<!– [if !supportLists]–>2)



<!– [endif]–>变量:
弱类型
变量可以付任何类型
数字
字符等

<!– [if !supportLists]–>3)



<!– [endif]–>运算符

<!– [if !supportLists]–>4)



<!– [endif]–>表达式

<!– [if !supportLists]–>5)



<!– [endif]–>语句

<!– [if !supportLists]–>6)



<!– [endif]–>函数
functions addInput
(){}

<!– [if !supportLists]–>7)



<!– [endif]–>对象:
html
中的元素都被表示为一个对象

.
”表示引用对象的属性或方法



或者:对象
[‘
属性(或方法)
’]

<!– [if !supportLists]–>8)



<!– [endif]–>This
:在
script
中指代此函数中的元素(或称对象)

this.name

<!– [if !supportLists]–>四、

<!– [endif]–>Bom

<!– [if !supportLists]–>1.



<!– [endif]–>Window
对象:包含了窗口的全局变量、方法和对象
新的窗口有新的
window

窗口属性:
name

HTML
链接的
target
属性作引导还可以引导弹出窗口

<!– [if !supportLists]–>2.



<!– [endif]–>跨浏览器通信

打开弹出窗口:
window.open
(‘
url
’‘
name
’‘宽度,高度’)没有跨窗口通信

指向其他窗口:进行跨窗口通信的
window.open

重新建立联系:主窗口载入新页面

<!– [if !supportLists]–>3.



<!– [endif]–>导航

Lacation
:包含了页面的当前位置

URL
对象
URL
的属性
href
(地址属性)



hash

(锚点)如
a
标签

history
:显示过的页面
属性
back
()
forward
()如同浏览器的前进后退

<!– [if !supportLists]–>4.



<!– [endif]–>窗口几何学

Screen
对象:

窗口尺寸:见
p177

弹出对话框:
alert


文本信息


confirm


文本信息


prompt
(‘文本信息’)

setTimeout(‘
函数

,‘时间’
)
:设定函数自动运行时间

clearTimeout

()取消

<!– [if !supportLists]–>5.



<!– [endif]–>document
对象

写入方法:
document.write
(‘
<h1>Hello world!</h1>
’)

Open
()与
close
():打开关闭网页

<!– [if !supportLists]–>6.



<!– [endif]–>cookie

设置
cookie

document.cookie=’testcookie=yes;

expires=Tue,23
Jan 2007 13:12:12 utc


path=/;domain=quirksmode.org’;
(


/
值对
) (
有效时间
)(
路径
)(
页面所处域
)

<!– [if !supportLists]–>五、

<!– [endif]–>事件

<!– [if !supportLists]–>1.



<!– [endif]–>事件

鼠标事件:
click(
单击
)dblclick
(双击)
mousedown
(按下鼠标)
mousemove
(鼠标移动)
mouseout
(鼠标移开)
mouseover
(鼠标移至)
mouseup
(松开鼠标)

键盘事件:
keyup
释放按键
keypress

keydown
按住

接口事件:


blur


focus
:失去或得到焦点


change

:表单和下拉菜单


load


unload
页面完全加载
和释放时


reset


submit
重置发送表单事件


resize

改变窗口大小


scroll

滚动模块内容时

<!– [if !supportLists]–>2.



<!– [endif]–>注册时间处理器:选中元素运行哪个函数

行内事件处理程序(违反结构与行为分离)

传统模式:
x.
方法
=
函数(缺点:设置多个方法,最后的会覆盖前一个)

W3c
模型:
x.addEventListener
(‘方法’,函数,
false

;


x.removeEventListener(‘

方法

,函数,
false)

微软:
x.attachEvent
(‘方法’,函数);


x.detachEvent

(‘方法’函数);

移除事件:
w3c
对象
.removeEventListener(‘
方法
’,
函数
,false)


微软
对象
.detachEvent(‘
方法
’,
函数
)

w3c
与微软兼容:条件语句

if
(对象
.addEventListener



对象
.addEventListener( ………)

Else if(
对象
.attachEvent)



对象
.attachEvent(……..)

<!– [if !supportLists]–>3.



<!– [endif]–>事件对象被执行顺序

冒泡:元素被触发的顺序是从选中元素往外
事件注册里的
false

捕获:元素被书法的顺序是从
document
直到事件目标。。。。
true

注:冒泡
change submit
不会在
document
window

上出发

取消时间传播:
if(
对象
.stopPropagation)

对象
.stopPropagation();
//w3c

对象
.cancelBubble=true;
//

微软

<!– [if !supportLists]–>4.



<!– [endif]–>事件对象和它的属性

1.Event
对象:时间对象
document
如何被传入函数


function

函数
( e){

var
变量
=e||window.event

注:
W3C
用参数
e
微软用
window.event

2.
事件对象属性:

this
的引用:
this
总指向你在其上定义
的事件处理元素



一般用注册同样事件处理程序到许多元素时

target

srcElement
属性指向产生事件的元素(如鼠标划过的元素



当依赖于冒泡事件使得事件往上传播的时候

<!– [if !supportLists]–>六、

<!– [endif]–>DOM

<!– [if !supportLists]–>1.



<!– [endif]–>节点

节点类型:
document
文档节点、文字是文本节点、元素节点

长途寻找元素:
getElementById() getElementByTagName()
返回节点列表对象


getElementByTagName()[]

节点别表中某个节点
0
表示
1
节点。。。。。。

短途寻找元素:
parentNode
父节点
firstChild
子一节点
lastChild
子末节点


PreviousSibling

兄弟上节点
nextSibling
兄弟下节点

<!– [if !supportLists]–>2.



<!– [endif]–>节点信息

nodeName:
节点的名称,即元素名称。当作属性名来用即
变量
.nodeName

nodeValue
:包含文本节点的内容。而对文档节点和元素节点不可用。

nodeType
:节点类型

文档节点
元素几点
文本节点。

<!– [if !supportLists]–>3.



<!– [endif]–>修改文档树

节点
.appendChild(
被添加节点
)
添加某个节点到改元素的子末节点
若被添加节点已在文档中,则从当前位置移除并移动到新位置。此方法可以作为变量的引用如

var
变量
=
节点
.appendChild(0)

节点
.insertBefore(
被添加节点
)
添加节点到某个节点的前面。其他如上

节点
.removeChild(
被添加节点
)
移除一个节点和他的子节点。

节点
.replaceChild(
被交换节点,被交换节点
)

<!– [if !supportLists]–>4.



<!– [endif]–>创建和克隆元素

Var
变量
=document.createElement(‘p’)
创建
p
标签

Var
变量
=document.createTextNode(‘this is
a create element’)

创建文本节点

创建的这些节点将有上节所讲内容插入到文档中

Var
变量
=
节点
.cloneNode(true

false)
克隆节点
true
表示也克隆所有子节点

<!– [if !supportLists]–>5.



<!– [endif]–>创建的表格应该放在
<tbody></tbody>

这样才能显示出来

innerHTML
属性显示元素中的内容如
p.innerHTML

<!– [if !supportLists]–>6.



<!– [endif]–>属性的读写

元素
.getAttribute(‘
属性名
’)
返回属性值

元素
.setAttribute(‘
属性名

,‘参数’
)

<!– [if !supportLists]–>七、

<!– [endif]–>核心

关联数组
变量
[]
其中放入的是字符串所引用的属性在
[‘’]
中的则是直接引用的属性前提是
[‘’]
必须是属性名而不能是引用改属性的字符串

<!– [if !supportLists]–>八、

<!– [endif]–>CSS
修改

<!– [if !supportLists]–>1.



<!– [endif]–>style
属性:元素的样式属性

元素
.style.margin

样式表中的

表示:如
font-size

script
中为
fontSize

单位:设置某个样式属性必须加上单位

xx.style.width=width+’px’;

<!– [if !supportLists]–>2.



<!– [endif]–>获取样式:元素
.currentStyle.
样式属性(如
color

<!– [if !supportLists]–>3.



<!– [endif]–>更改
class

id

<!– [if !supportLists]–>1)



<!– [endif]–>通过更改
class

id
更改为预先建立的样式的从而改变样式表。


格式如:
document.getElementById(‘text’).className=’class’

<!– [if !supportLists]–>2)



<!– [endif]–>增加
class

增加
class
是在原有
class
样式上在加上新加
class
的样式

格式如:
xx.className+=

newclassname’
空格必加

<!– [if !supportLists]–>3)



<!– [endif]–>移除
class

xx.className=xx.className.replace(/
newclassname/,’’);

吧以前的
newclassname
替换为空字符从而移除
class

<!– [if !supportLists]–>4.



<!– [endif]–>向页面中写入
css
和更改整个样式表(暂不了解)

<!– [if !supportLists]–>九、

<!– [endif]–>数据类型:串
(string)

数组(
array

<!– [if gte vml 1]><v:line id=”_x0000_s1026″
style=’position:absolute;left:0;text-align:left;z-index:1′ from=”117pt,7.8pt”
to=”2in,7.8pt”/><![endif]–><!– [if !vml]–>
<!– [endif]–><!– [if gte vml 1]><v:line id=”_x0000_s1027″
style=’position:absolute;left:0;text-align:left;flip:y;z-index:2′ from=”117pt,7.8pt”
to=”2in,23.4pt”/><![endif]–><!– [if !vml]–>
<!– [endif]–>
BOM:Browser

object

model


DOM:Document

 

joomla1.5——JDocument类用法

文档类,提供一个容易的接口解析和显示文件 

       

Method        Description

__construct        构造函数

addScript        增加一个连接到页

addScriptDeclaration        增加脚本到页

addStyleDeclaration        增加一个stylesheet声明到页

addStyleSheet        增加一连接的stylesheet到页

getBase        返回本文的基本URI

getBuffer        得到本文缓冲的内容

getCharset        返回本文charset 内码

getDescription        返回页的标题

getDirection        返回文件语言

getGenerator        返回文档创建者

getHeadData        得到本文头数据

getInstance        返回在全局 JDocument对象

getLanguage        得到语言.

getLink        得到文档的URL

getMetaData        得到meta标签

getTitle        得到文档标题

getType        得到文档类型

loadRenderer        随机装载

render        输出文档

setBase        设置文档的e基本URI

setBuffer        设置本文缓冲的内容

setCharset        设置本文charset

setDescription        设置本文的描述

setDirection         设置全局文件声明。 缺省左到右(ltr)。 

setGenerator        设置文本创建者

setHeadData        设置文本头信息

setLanguage        设置语言.

setLineEnd         设置线结尾样式对Windows、Mac、Unix或者自定义串。 

setLink        设置文档链接

setMetaData        设置metai标签

setMimeEncoding        设置被送到浏览器的本文MIME内码

setModifiedData        定本文修改过的日期

setTab        设置串被用于内嵌HTML

setTitle        设置文档标题

setType        设置文档类型.

方法应用:

addScript()

        意义:增加一个连接到页

        语法:void addScript (string $url, [string $type = “text/javascript”])

                string $url: URL to the linked script

                string $type: Type of script. Defaults to ‘text/javascript’

        实际应用:

        $temp =& Jfactory::getDocument();

        $temp->addscript(JURI::base().’includes/js/overlib_mini.js’);

        结果:在head部分插入一段js

addScriptDeclaration()

        意义:增加脚本到页头

        语法:void addScriptDeclaration (string $content, [string $type = ‘text/javascript’])

                string $content: Script

                string $type: Scripting mime (defaults to ‘text/javascript’)

        实际应用:

        $temp =& Jfactory::getDocument();

        $script = “alert( ‘A script has been added to the page!’ );”;

        $temp->addScriptDeclaration($scirpt);

getBase()

        意义:返回本文的基本URI

        语法:string getBase ()

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->getBase();

getBuffer()

        意义:得到本文缓冲的内容

        语法: getBuffer ()

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->getBuffer();

getInstance()

        意义:返回在全局JDocument对象

        语法:object The &getInstance ([type $type = ‘html’], [ $attributes = array()])

                type $type: The document type to instantiate

                $attributes

        实际应用:

        $temp =& Jfactory::getDocument();

        $temp->getInstance(‘html’); //生成jdocumenthtml对象.

        $temp->getInstance(‘error’);//生成 jdocumenterror对象.

        $temp->getInstance(‘feed’);//生成 jdocumentfeed对象.

       

setBuffer()

        意义:设置本文缓冲的内容

        语法:void setBuffer (string $content)

                string $content: The content to be set in the buffer

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->setBuffer();

setDirection()

        意义: 设置全局文件声明。 缺省左到右(ltr)。 

        语法:void setDirection ([ $dir = “ltr”], string $lang)

                string $lang

                $dir

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->setDirection();

setGenerator()

        意义: 设置文本创建者

        语法:void setGenerator (string $generator)

                string $generator

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->setGenerator();

setHeadData()

        意义: 设置文本头信息

        语法:void setHeadData (array $data)

                array $data: The document head data in array form

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->setHeadData();

setLanguage()

        意义: 设置语言

        语法:void setLanguage ([string $lang = “en-gb”])

                string $lang

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->setLanguage();

setLineEnd()

        意义: 设置线结尾样式对Windows、Mac、Unix或者自定义串。

        语法:void setLineEnd (string $style)

                string $style: “win”, “mac”, “unix” or custom string.

        实际应用:

        $temp =& Jfactory::getDocument();

        echo $temp->setLineEnd();

setLink()

        意义: 设置文档链接

        语法:void setLink (string $url)

                string $url: A url

        实际应用:

        $temp =& Jfactory::getDocument();

        $link=”www.joomla.org”;

        $temp->setLink($link);

setMetaData()

        意义: 设置meta标签

        语法:void setMetaData (string $name, string $content, [bool $http_equiv = false])

                string $name: Value of name or http-equiv tag

                string $content: Value of the content tag

                bool $http_equiv: META type “http-equiv” defaults to null

        实际应用:

        $temp =& Jfactory::getDocument();

        $temp->setMetaData(‘Publisher’, ‘joomla! Documentation Team!’);

        result:

        <meta name=”Publisher” content=”Joomla! Documentation Team” />

setMimeEncoding()

        意义: 设置被送到浏览器的本文MIME内码

        语法:void setMimeEncoding ([string $type = ‘text/html’])

                string $type.

        实际应用:

        $temp =& Jfactory::getDocument();

        $temp->setMimrEncoding(‘application/xml’));

setModifiedDate()

        意义: 定本文修改过的日期

        语法:void setModifiedDate (string $date)

                string $date

        实际应用:

        $temp =& Jfactory::getDocument();

        $temp->setModifiedDate($date));

网页技巧总结:快捷键提交表单方法

 

 经常看到许多网站论坛上面快捷键提交表单的方法,比较好奇,经研究写出来了方法

JS CTRL+ENTER 提交

<script language=javascript>
ie = (document.all)  true:false
if (ie){
function ctlent(eventobject){if(event.ctrlKey && window.event.keyCode==13){this.document.form1.submit();}}
}
</script>

<form action="http://www.webjx.com/index.html" method=POST name=form1>
<textarea cols=95 name=Content rows=12 wrap=virtual onkeydown=ctlent()>
Ctrl+Enter提交内容信息
</textarea>
<input type=Submit value="Submit" name=Submit>
</form>


 accesskey 提交

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<form action="http://www.webjx.com/index.html" method=POST name=form1>
<textarea ></textarea>
<br><input type=submit accessKey="S" value=提交(Alt+s)>
</form> 

 
对于快捷键的使用IE:ALT+快捷键

跨域资源共享的10种方式

在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?

同源策略

在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.example.org),那么我们就可以认为它们是相同的域。比如http://www.example.org/index.html和http://www.example.org/sub/index.html是同域,而http://www.example.org, https://www.example.org, http://www.example.org:8080, http://sub.example.org中的任何两个都将构成跨域。同源策略还应该对一些特殊情况做处理,比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的,如果脚本能通过file协议访问到硬盘上其它任意文件,就会出现安全隐患,目前IE8还有这样的隐患。

受到同源策略的影响,跨域资源共享就会受到制约。但是随着人们的实践和浏览器的进步,目前在跨域请求的技巧上,有很多宝贵经验的沉淀和积累。这里我把跨域资源共享分成两种,一种是单向的数据请求,还有一种是双向的消息通信。接下来我将罗列出常见的一些跨域方式,以下跨域实例的源代码可以从这里获得

单向跨域

JSONP

JSONP (JSON with Padding)是一个简单高效的跨域方式,HTML中的script标签可以加载并执行其他域的JavaScript,于是我们可以通过script标记来动态加载其他域的资源。例如我要从域A的页面pageA加载域B的数据,那么在域B的页面pageB中我以JavaScript的形式声明pageA需要的数据,然后在pageA中用script标签把pageB加载进来,那么pageB中的脚本就会得以执行。JSONP在此基础上加入了回调函数,pageB加载完之后会执行pageA中定义的函数,所需要的数据会以参数的形式传递给该函数。JSONP易于实现,但是也会存在一些安全隐患,如果第三方的脚本随意地执行,那么它就可以篡改页面内容,截获敏感数据。但是在受信任的双方传递数据,JSONP是非常合适的选择。

flash URLLoader

flash有自己的一套安全策略,服务器可以通过crossdomain.xml文件来声明能被哪些域的SWF文件访问,SWF也可以通过API来确定自身能被哪些域的SWF加载。当跨域访问资源时,例如从域www.a.com请求域www.b.com上的数据,我们可以借助flash来发送HTTP请求。首先,修改域www.b.com上的crossdomain.xml(一般存放在根目录,如果没有需要手动创建) ,把www.a.com加入到白名单。其次,通过Flash URLLoader发送HTTP请求,最后,通过Flash API把响应结果传递给JavaScript。Flash URLLoader是一种很普遍的跨域解决方案,不过需要支持iOS的话,这个方案就无能为力了。

Access Control

Access Control是比较超越的跨域方式,目前只在很少的浏览器中得以支持,这些浏览器可以发送一个跨域的HTTP请求(Firefox, Google Chrome等通过XMLHTTPRequest实现,IE8下通过XDomainRequest实现),请求的响应必须包含一个Access-Control-Allow-Origin的HTTP响应头,该响应头声明了请求域的可访问权限。例如www.a.com对www.b.com下的asset.php发送了一个跨域的HTTP请求,那么asset.php必须加入如下的响应头:

header("Access-Control-Allow-Origin: http://www.a.com");

window.name

window对象的name属性是一个很特别的属性,当该window的location变化,然后重新加载,它的name属性可以依然保持不变。那么我们可以在页面A中用iframe加载其他域的页面B,而页面B中用JavaScript把需要传递的数据赋值给window.name,iframe加载完成之后,页面A修改iframe的地址,将其变成同域的一个地址,然后就可以读出window.name的值了。这个方式非常适合单向的数据请求,而且协议简单、安全。不会像JSONP那样不做限制地执行外部脚本。

server proxy

在数据提供方没有提供对JSONP协议或者window.name协议的支持,也没有对其它域开放访问权限时,我们可以通过server proxy的方式来抓取数据。例如当www.a.com域下的页面需要请求www.b.com下的资源文件asset.txt时,直接发送一个指向www.b.com/asset.txt的Ajax请求肯定是会被浏览器阻止。这时,我们在www.a.com下配一个代理,然后把Ajax请求绑定到这个代理路径下,例如www.a.com/proxy/, 然后这个代理发送HTTP请求访问www.b.com下的asset.txt,跨域的HTTP请求是在服务器端进行的,客户端并没有产生跨域的Ajax请求。这个跨域方式不需要和目标资源签订协议,带有侵略性,另外需要注意的是实践中应该对这个代理实施一定程度的保护,比如限制他人使用或者使用频率。

双向跨域

document.domain

通过修改document的domain属性,我们可以在域和子域或者不同的子域之间通信。同域策略认为域和子域隶属于不同的域,比如www.a.com和sub.a.com是不同的域,这时,我们无法在www.a.com下的页面中调用sub.a.com中定义的JavaScript方法。但是当我们把它们document的domain属性都修改为a.com,浏览器就会认为它们处于同一个域下,那么我们就可以互相调用对方的method来通信了。

FIM – Fragment Identitier Messaging

不同的域之间,JavaScript只能做很有限的访问和操作,其实我们利用这些有限的访问权限就可以达到跨域通信的目的了。FIM (Fragment Identitier Messaging)就是在这个大前提下被发明的。父窗口可以对iframe进行URL读写,iframe也可以读写父窗口的URL,URL有一部分被称为frag,就是#号及其后面的字符,它一般用于浏览器锚点定位,Server端并不关心这部分,应该说HTTP请求过程中不会携带frag,所以这部分的修改不会产生HTTP请求,但是会产生浏览器历史记录。FIM的原理就是改变URL的frag部分来进行双向通信。每个window通过改变其他window的location来发送消息,并通过监听自己的URL的变化来接收消息。这个方式的通信会造成一些不必要的浏览器历史记录,而且有些浏览器不支持onhashchange事件,需要轮询来获知URL的改变,最后,URL在浏览器下有长度限制,这个制约了每次传送的数据量。

Flash LocalConnection

页面上的双向通信也可以通过Flash来解决,Flash API中有LocalConnection这个类,该类允许两个SWF之间通过进程通信,这时SWF可以播放在独立的Flash Player或者AIR中,也可以嵌在HTML页面或者是PDF中。遵循这个通信原则,我们可以在不同域的HTML页面各自嵌套一个SWF来达到相互传递数据的目的了。SWF通过LocalConnection交换数据是很快的,但是每次的数据量有40kb的大小限制。用这种方式来跨域通信过于复杂,而且需要了2个SWF文件,实用性不强。

window.postMessage

window.postMessage是HTML5定义的一个很新的方法,这个方法可以很方便地跨window通信。由于它是一个很新的方法,所以在很旧和比较旧的浏览器中都无法使用。

Cross Frame

Cross Frame是FIM的一个变种,它借助了一个空白的iframe,不会产生多余的浏览器历史记录,也不需要轮询URL的改变,在可用性和性能上都做了很大的改观。它的基本原理大致是这样的,假设在域www.a.com上有页面A.html和一个空白代理页面proxyA.html, 另一个域www.b.com上有个页面B.html和一个空白代理页面proxyB.html,A.html需要向B.html中发送消息时,页面会创建一个隐藏的iframe, iframe的src指向proxyB.html并把message作为URL frag,由于B.html和proxyB.html是同域,所以在iframe加载完成之后,B.html可以获得iframe的URL,然后解析出message,并移除该iframe。当B.html需要向A.html发送消息时,原理一样。Cross Frame是很好的双向通信方式,而且安全高效,但是它在Opera中无法使用,不过在Opera下面我们可以使用更简单的window.postMessage来代替。