1. Web浏览器环境
HTML定义内容,CSS提供表现形式,JS为内容及表现形式增加行为。
JS的作用就是增强用户的浏览体验,使得信息的获取和传输更加容易,用户体验不应依赖于JS,但是JS可以作为这种体验的工具。
无干扰的JS的客户端编程模式要求保持JS代码和HTML标记的分离,降低优雅性,但不能降低一个HTML页面的可访问性。
Window对象为全局执行环境,是位于作用域链头部的全局对象,可由window和self属性来引用,其frames[]数组包含了多帧文档中各帧的Window对象的引用。document属性引用与窗口关联在一起的Document对象。
2. 在HTML中嵌入脚本
script标记:
客户端js代码放置在标记之间,可以使用document.write()函数根据脚本的位置把HTML文本输出到文档,HTML解析器须在解析的过程中解释js脚本,而不会在文档解析之后,将文档中所有脚本合并在一个大的脚本运行,因为文档中任何脚本都可能改变文档。
默认脚本语言:可以使用HTML的 标记指定默认脚本语言
可在标记:使用document.write()方法和innerHTML属性输出其他脚本时,注意""字符串,因HTML解析器会将其作为脚本的结束标记,故可以写成""+"script>",或者"<\/script>"
3. HTML中的事件句柄
onmousedown,onmouseup: 大部分元素支持
onmouseover,onmouseout: 鼠标悬停或移出时触发
onchange:
onload: body标记的句柄
4.URL中的javascript
javascript协议:"javascript:"协议限定符+URL
URL由javascript代码串组成,它被当作单独的一行代码对待,其中的语句由分号分隔。
由此URL指定的“资源”为javascript代码的返回值,若返回值不为undefined,则浏览器载入这样的javascript URL时,使用最后一个语句或表达式的值转换为一个字符串,作为新载入的文档的内容显示,即若一个锚元素的href属性为"javascript:window.open('about:blank')",则点击它后当前窗口会打开一个新的窗口,并且当前窗口会载入一个新的文档,这个文档的内容为javascriptURL中最后一个语句返回值的字符串形式。例如 javascript:window.open("about:blank")会使当前窗口显示为(如果是IE) [object] .若返回值为undefined,则“资源”为空,当前窗口内容保持不变。
在javascriptURL最后加上一句void 0;可使返回值变为undefined 。
chrome会直接忽略在地址栏中输入的javascriptURL,火狐和IE不会,javascriptURL也可以传递给一个期待URL参数的方法,如window.open();
5.javascript程序执行
带defer的脚本会在文档完全解析,所有非延迟脚本执行后,onload句柄触发前执行
由于onload句柄在文档完全解析之后调用,它们必须不调用document.write(),任何这样的调用都会重新打开一个新文档并覆盖掉当前文档
onunload事件句柄:
用户导航离开一个web页面时,浏览器会触发onunload事件句柄
客户端线程模型:
客户端js是单线程的,于是可将计算分解为离散的子任务,可以使用setTimeout和setInterval在后台运行子任务,同时更新一个进度指示器来向用户显示反馈。
6 客户端兼容性
只留下了对IE条件注释的部分
IE中的条件注释:
This is normal HTML content, but IE will not display it
because of the comment above and the comment below.
This is normal content, displayed by all browsers.
IE中的js条件注释以结束(cc_on中的cc表示有条件编译)。
JScript是Microsoft的javascript解释器的名字,而@_jscript变量在IE中总是为true,通过条件注释和常规js注释的合理交叉组合,可以设置在IE中运行一段代码而在所有其他浏览器中运行另一段不同的代码:
// This code is no longer inside a JavaScript comment, but is still
// inside the IE conditional comment. This means that all browsers
// except IE will run this code.
alert('You are not using Internet Explorer');