javascripts的跨域问题是在开发中经常遇到的问题。
1. jsonp的跨域
原理是:
首先在当前页面定义好callback函数,
接着动态创建script标签,src是跨域传输的链接地址,
后台回调例如callback('success')的字符串。当前页面就会马上这行。
局限:只能使用get的方式,对于使用post方式跨域传输是无效的
2. form + iframe 实现跨越
原理是:
首先在当前页面定义好callback函数,
在页面中iframe高度为0(用户不可见),
form的target指向这个iframe,
后台返回的js代码,来触发callback方法
优势:如果get的方式的话,一般用jsonp就能处理,如果是要post的方式的话,就只能用这个。
这是当前页面 ==================test.html================================
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="jquery-1.10.2.js"></script>
<script src='http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=3196502474' charset="utf-8"></script>
</head>
<body>
<script>
function callback(data){
console.log(data.errCode);
}
</script>
<iframe src="" frameborder="0" id="if"></iframe>
<form action="test.php" target="if" id='f'>
<input type="file">
</form>
<button valu="click" id="btn"></button>
<script>
$('#btn').click(function(event) {
$('#f').submit();
});
</script>
</body>
</html>
这是跨域页面 ==================test.php===============================
<?php
?>
<script>
window.parent.callback({
errCode:1,
data:{
}
});
</script>
问题:返回的callback如果指定作用于呢?如上面的例子,必须是window.parent.callback,这样的话,我的callback函数一定要定义在全局才可以执行,会污染全局环境了?