javascript|javascript跨域问题的总结

【javascript|javascript跨域问题的总结】本文总结了我在遇到javascript跨域问题时曾经尝试过的解决方法,可能考虑的不太全面。
javascript处于安全的考虑,不允许访问不同域名的文档,不同域不仅包括不同的主域名也包括主域名和子域名,一个主域名下的不同子域名(如:http://skb.kuxun.cn和http://piao.kuxun.cn),一个主域名下二级域名和三级域名(如:http://skb.kuxun.cn和http://cha.skb.kuxun.cn)。在这种时候javascript不能获取不同域的任何信息(取值和赋值)。
javascript的跨域包括Ajax跨域访问和通过javascript访问frame,iframe中不同域名的文档,实际这些都是由于javascript的跨域问题所引起的。
下文将给出几种解决javascript跨域问题的解决方法:
1.通过异步添加标签来进行回调
个人感觉异步加载script是跨域比较完美的解决方案,不过目标程序需要为js格式,举个例子来说我想在http://skb.kuxun.cn/a.php中调用http://piao.kuxun.cn/b.php:
b.php
echo 'alert("Hello"); ';
?>
a.php的javascript
var script = document.createElement("script");
script.setAttrbute("src", "http://piao.kuxun.cn/b.php");
这样a.php中浏览器开始解释b.php输出的内容js
2.通过本地程序进行中转
假设http://skb.kuxun.cn下的a.html想要通过Ajax调用http://piao.kuxun.cn下的b.php,直接进行Ajax调用肯定会出现Permission denied的,那就要想办法通过http://skb.kuxun.cn来访问目标文件,这就需要一个中转程序暂且就称他remoteproxy.php,在php中可以通过file_get_contents,socket等方法取调用远端程序,这样http://skb.kuxun.cn/1.html通过Ajax去调用http://skb.kuxun.cn/remoteproxy.php?remoteurl=http://piao.kuxun.cn/b.php,这样在浏览器看来是通过Ajax来调用调用同一域名下的文件,这样就解决了Ajax跨域的问题。
3.通过服务器配置来进行内部转发
采用服务器端rewrite的方法来实现浏览器端url不变的跳转,如apache的http-proxy模块。原理同2。

    推荐阅读