一、Location对象


Location对象指定当前显示在窗口中的URL,并允许脚本往窗口里载入新的URL。

// 设置location属性,从而跳转到新的web页面
window.location = "http://www.ligang.com";

Window对象中其中一个最重要的属性是document,它引用Document对象,后者表示显示在窗口中的文档。


二、客户端JavaScript线程模式--单线程


单线程执行意味着浏览器必须在脚本和事件句处理程序执行的时候停止响应用户输入。

HTML5定义了一种并发的控制方式,叫做“Web worker”。


三、同源策略


1. 同源策略是对JavaScript代码能够操作那些web内容的一条完成的安全限制,其不能防止服务器攻击。

2. 文档的来源包括:协议、主机以及载入文档的URL端口。

3. 为了支持多域名站点,可以使用Document对象的domain属性。在默认情况下,属性domain存放的是载入文档的服务器主机名。如果两个窗口(或窗体)包含的脚本把domain设置成了相同的值,那么这两个窗户就不再受同源策略的约束,它们可以相互读取对方的属性。

[1] 跨域资源共享CORS(Cross-Origin Resource Sharing),它允许服务器用头信息显示的列出源,或使用通配符来匹配所有的源并允许由任何地址请求文件。

[2] 跨文档消息(cross-document messaging),允许来自一个文档的脚本可以传递文本消息到另一个文档里的脚本,而不管脚本的来源是否不同,调用Window对象上的postMessage()方法,可以异步传递消息事件到窗口的文档里。


四、跨站脚本



// 获取请求URL的“?”后的内容
decodeURIComponent(window.location.search.substring(1)) || "";
http://siteA/index.html?name=%3Cscript%3Ealert('XSS')%3C/script%3E   //<script>alert('XSS')</script>
http://siteA/index.html?name=%3Cscript%20src='xss.js'%3E%3C/script%3E //<script src='xss.js'></script>
//防止上述XSS攻击最简单的方式是,在使用任何不可信的数据来动态的创建文档内容之前,从中移除Html标签。
name = name.replace(/</g,"≶").replace(/>/g,">");

五、Window对象


1. setTimeout()和setInterval()前者只调用一次,后者在指定毫秒数间隔里重复调用。二者均可传递给clearInterval(),取消后续函数的调用。

2. Document对象的location属于也引用到Location对象;

window.location === document.location;  //总是返回true

3. 解析URL


// 提取URL的搜索字符串中的参数
function urlArgs(){
var args = {};
var query = location.search.substring(1);
var pairs = query.split("&");
for(var i=0; i<pairs.length; i++){
var pos = pairs[i].indexOf('=');
if(pos == -1) continue;
var name = pairs[i].substring(0,pos);
var value = pairs[i].substring(pos+1);
value = decodeURIComponent(value);
args[name] = value;
}
return args;
}

4. 载入新的文档


如果文档中没有元素ID是“top”,它会让浏览器跳到文档开始处:


location = "#top";

//跳转到文档顶部


5. 浏览历史


History对象是用来把窗口的浏览历史用文档和文档状态列表的形式表示。


后退:back()、前进:forward()、history.go(-2)。子窗口的浏览历史会按时间顺序穿插在主窗口的历史中。


jQuery有history插件,RSH也是一个比较流行的实例。


6. Navigator对象


Web浏览器全称:appName


浏览器版本:appVersion


Http头部发送信息;userAgent


操作系统:platform


7. 对话框


do{
var name = prompt("what is your name?"); // 得到一个字符串输入
var correct = confirm("You entered '"+ name +"'.\n"); // 得到一个布尔值
}while(!correct)
alert("Hello "+name); // 输出一个纯文本消息

六、多窗口和窗体


1. 任何窗口或窗体中的JavaScript代码都可以将自己的窗口和窗体引用为window或self。

2. 对于顶级窗口来说:self = parent = top

3. top属性引用的是指向包含它的顶级窗口。

4. iframe元素有contentWindow属性,引用该窗体的Window对象。

var childFrame = document.getElementById("f1").contentWindow;

七、函数在定义它的作用域中执行,而不是在调用它的作用域中执行。