javascript跨域問題的總結

本文總結了我在遇到javascript跨域問題時曾經嘗試過的解決方法,可能考慮的不太全面。
javascript處於安全的考慮,不允許訪問不同名的文檔,不同域不僅包括不同的主域名也包括主域名和子域名,一個主域名下的不同子域名(如:http://skb.kuxun.cnhttp://piao.kuxun.cn),一個主域名下二級域名和三級域名(如:http://skb.kuxun.cnhttp://cha.skb.kuxun.cn)。在這種時候javascript不能獲取不同域的任何信息(取值和賦值)。
javascript的跨域包括Ajax跨域訪問和通過javascript訪問frame,iframe中不同域名的文檔,實際這些都是由於javascript的跨域問題所引起的。
下文將給出幾種解決javascript跨域問題的解決方法:
1.通過異步添加<script>標籤來進行回調
個人感覺異步加載script是跨域比較完美的解決方案,不過目標程序需要爲js格式,舉個例子來說我想在http://skb.kuxun.cn/a.php中調用http://piao.kuxun.cn/b.php
b.php
<?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。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章