场景:
如何得到正在执行的script元素?
"新"货色:
document.currentScript;
来源:
- 非标准,适用在Gecko 2.0+(FF4+)
- 返回当前正在执行的<script>元素
if(document.currentScript.async){ //异步 }else{ //同步 }
扩展阅读:
https://github.com/seajs/seajs/issues/468
https://developer.mozilla.org/en-US/docs/DOM/document.currentScript
https://developer.mozilla.org/zh-CN/docs/DOM/document.currentScript
已有 0 人发表留言,猛击->>这里<<-参与讨论
ITeye推荐
- —软件人才免语言低担保 赴美带薪读研!—
理解布局对于良好的Android程序设计非常重要。在这个教程里,你将学到相对布局的所有知识,相对布局用于将用户界面控件或小工具相对于其它控件或它们的父级布局组织在屏幕上。当使用正确的时候,相对布局可以是很强大和灵活布局,很多有趣的Android程序用户界面都可以基于它来设计。
什么是相对布局
除了将控件显示在一行或一列的线性布局,相对布局也是Android用户界面设计使用得很普遍的布局类型。和其它布局很相似,相对布局可以通过XML布局资源来定义也可以用Java程序来定义。相对布局的功能就像它的名字表达的一样:它相对其它控件或父控件本身来组织控件。
这是什么意思呢?意思是子控件,比如ImageView,TextView,和Button控件,可以放在另外一个控件的上面,下面,或是左边或者右边。子控件可以相对于父控件(相对布局容器)放置,包括放置在布局的顶部,底部,左部或右部边缘。
相对布局子控件位置使用规则来定义。这些规则定义了相对布局内的控件如何显示。相对布局的完整规则列表请参见RelativeLayout类的Android SDK文档。相关的用于XML资源的XML属性也可以在文档中找到。
注意:规则要求每个子控件恰当地设置了它的id属性。
一个简单的相对布局
相对布局最好使用例子来解释。假设我们要设计一个屏幕,包含一个EditText控件和一个Button控件。我们希望Button显示在EditText控件的右边。因此,我们可以定义一个包含两个子控件的相对布局:子控件分别是EditText和Button。EditText控件可能有一个规则说:将这个控件放置在父控件(布局)的左手边并且在第二个控件(Button)的左边。同时,Button控件可能有一个规则:将这个控件放置在父控件(布局)的右手边。
下面的图片就展示了这样一个相对布局,分别是竖屏和横屏模式。这个相对布局有两个子控件:一个EditText控件和一个Button控件。
定义带有相对布局的XML资源文件
设计程序用户界面最方便和可维护的方法是创建XML布局资源。这个方法极大地简化了UI设计过程,将很多静态创建和用户界面控件的布局以及控件属性的定义移到XML中去,取代了写代码。
XML布局资源必须存储在/res/layout项目目录下。让我们看看前一节介绍的相对布局。这个布局资源文件,恰当地命名为/res/layout/relative.xml,在XML中如下定义:
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent"> android:id="@+id/EditText01" android:hint="Enter some text..." android:layout_alignParentLeft="true" android:layout_width="fill_parent" android:layout_toLeftOf="@+id/Button01" android:layout_height="wrap_content"> android:id="@+id/Button01" android:text="Press Here!" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:layout_height="wrap_content">
回忆一下,在Activity中,只需要在onCreate()方法中添加一行代码来在屏幕上加载和显示布局资源。如果布局资源存放在/res/layout/relative.xml文件中,这行代码应该是:
setContentView(R.layout.relative); 这个相对布局设置了宽和高填充整个屏幕,并且它的子控件配置了三个规则:
- EditText01:对齐到布局的左手边
- EditText01:显示在Button01的左边
- Button01:对齐到布局的右手边
用程序定义相对布局
你也可以用程序创建和配置相对布局。这通过使用RelativeLayout类(android.widget.Relative)来实现。你会在RelativeLayout.LayoutParams类中找到具体的参数。同样地,典型的布局参数(android.view.ViewGroup.LayoutParams),比如layout_height和layout_width,以及边距参数(ViewGroup.MarginLayoutParams),也能用在RelativeLayout对象上。
你必须用Java创建屏幕内容,然后向setContentView()方法提供一个包含所有要作为子视图显示的控件内容的父布局对象,而不是像前面所示直接使用setContentView()方法来加载布局资源。在这里,你的父布局就是相对布局。例如,下面的代码示例了如何用程序在活动中实例化一个RelativeLayout并且在它的onCreate()方法中向它添加一个TextView和一个Button控件,就像前面一节展示的布局一样:
publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.relative); EditText ed = new EditText(this); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); // use same id as defined when adding the button params.addRule(RelativeLayout.LEFT_OF, 1001); ed.setLayoutParams(params); ed.setHint("Enter some text...."); Button but1 = new Button(this); RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); but1.setLayoutParams(params2); but1.setText("Press Here!"); // give the button an id that we know but1.setId(1001); RelativeLayout layout1 = new RelativeLayout(this); layout1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); layout1.addView(ed); layout1.addView(but1); setContentView(layout1); }
让我们仔细看一下上面的Java代码。首先我们像平常一样创建一个EditText控件。我们给它一些RelativeLayout参数,然后设置它的规则。在这里,我们为EditText控件创建2个规则。
接下来,我们创建一个Button控件并且设置它的规则(对齐到父布局右边缘)。最后,我们创建一个RelativeLayout对象,设置它的参数,使用addView()方法添加两个控件并且使用setContentView()方法加载显示相对布局。
如你所见,当越来越多的控件要添加到屏幕时,代码量会很快地增长。为了易组织和可维护性,用程序定义并使用布局最好是用在特殊情况而不是一般情况。
探讨相对布局的重要特性和属性
现在让我们来讨论一些帮助配置相对布局和它的子控件的属性。一些特定的属性用于相对布局,也就是子规则,包括:
- 用于子控件在父布局中居中的规则,包括:水平居中,垂直居中,或者两者皆居中。
- 用于子控件在父布局中排布的规则,包括:在顶部,底部,左,右边缘放置。
- 用于子控件相对于其它子控件排布的规则,包括:在另一个控件顶,底,左,右边缘放置。
- 用于子控件相对于其它子控件放置的规则,包括:在另一个控件上面,底下,左边或右边放置。
同样的,通用的 ViewGroup-style属性也可以应用于相对布局。这些属性包括:
- 通用布局参数比如layout_height(必须)和layout_width(必须)(类:ViewGroup.LayoutParams)
- 边距布局参数比如margin_top, margin_left, margin_right和margin_bottom (类:ViewGroup.
MarginLayoutParams)
布局参数比如layout_height和layout_width (类:ViewGroup.LayoutParams)
现在让我们来实践这些规则吧!
使用布局规则
让我们看一个更复杂的屏幕设计。为了这个练习,我们从查看最终屏幕效果开始,然后再倒回来工作,并讨论这个相对布局的特性和为了达到最终结果所使用的规则。
我们希望设计一个如下所示的屏幕:
为了使用相对布局来设计这个屏幕,参考以下步骤。
步骤1:在你的XML资源文件中定义一个相对布局
首先,在你的XML资源文件中定义一个相对布局。因为你想这个布局控制整个屏幕的内容,所以设置它的高和宽属性为fill_parent。你的XML资源文件应该看起来像这样:
xmlns:android=http://schemas.android.com/apk/res/android android:layout_height=
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP 协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
通用头域(即通用头)
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。
Cache-Control头域
Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:Public指示响应可被任何缓存区缓存;Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效;no-cache指示请求或响应消息不能缓存;no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存;max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应;min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应;max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date头域
date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Pragma头域
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。
Connection表示连接状态
请求:close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。
keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。
响应:close(连接已经关闭)。
keepalive(连接保持着,在等待本次连接的后续请求)。
Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300
请求消息(请求头)
请求消息的第一行为下面的格式:
Method Request-URI HTTP-Version
Method 表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的,GET方法取回由Request-URI标识的信息, HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体;POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。Request-URI表示请求的URL。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP-
Version表示支持的HTTP版本,例如为HTTP/1.1。
请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
典型的请求消息:
GET http://download.microtool.de:80/somedata.exe
Host: download.microtool.de
Accept:*/*
Pragma: no-cache
Cache-Control: no-cache
Referer: http://download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-
上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。
Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回;Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。Accept-Charset: 浏览器申明自己接收的字符集。Authorization:当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,用该头部来回应自己的身份验证信息给WEB服务器。User-Agent头域的内容包含发出请求的用户信息。Referer
头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址; Range头域可以请求实体的一个或者多个子范围。例如
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)