检查iframe被嵌套的三种方式

采用window对象方式

if (window.top != window.self) {
	alert("window对象-被嵌套一层或多层");	
}
if (window.top != window.parent) {
	alert("window对象-被嵌套两层");
}

采用self对象方式

if (self.top != self.self) {
	alert("self对象-被嵌套一层或多层");
}
if (self.top != self.parent) {
	alert("self对象-被嵌套两层");
}

采用逻辑表达式之短路计算方式

(t = window.top) && t == window.self || alert("短路计算-被嵌套一层或多层");
(t = window.top) && t == window.parent || alert("短路计算-被嵌套两层");

逻辑表达式说明

Continue reading »

jsonp学习汇总

为什么要使用jsonp?
为了解决在不同域名下,即跨域(参考JavaScript同源策略)获取数据的问题。

这是同域请求

<script src='//libs.baidu.com/jquery/2.0.0/jquery.min.js'></script>
<script type="text/javascript">
    $.ajax({
        url: 'http://127.0.0.1/a.json',
        dataType: "json",
        success: function (data) {
            console.log(data);
        }
    });
</script>

a.json

{
    "name": "sun",
    "age": 10
}

2015-07-11_143704

如果换成跨域?

<script src='//libs.baidu.com/jquery/2.0.0/jquery.min.js'></script>
<script type="text/javascript">
    $.ajax({
        url: 'http://www.sun.cn/a.json',
        dataType: "json",
        success: function (data) {
            console.log(data);
        }
    });
</script>

2015-07-11_144552
提示跨域了,现在就需要jsonp出马。…

Continue reading »

匿名立即调用函数学习

错误例子:
因为在解析器解析全局的function或者function内部function关键字的时候,默认是认为function声明,而不是function表达式,如果你不显示告诉编译器,它默认会声明成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。

function() {// FF报错信息:SyntaxError: function statement requires a name
    alert("第18行");
}();
Continue reading »