各位大俠: 最近遇到了 javascript 跨域調用問題 我在這種父子頁面需要傳回值的頁面上使用 window.opener.document.getElementById().value的時候,頁面會報錯,告訴我拒絕訪問。父子頁面屬於不同的網站。鬱悶ing…… 在網路上搜了一下,江湖傳言如下: Javascript出於安全性考慮,是不允許跨域調用其他頁面的對象的。因此也就導致了在一些ajax應用中,使用跨域的web service成為問題。 在多數情況下,只有同一個域內的頁面才能互動作用。比如,一個位於 www.microsoft.com/ 域中的頁面可以自由地通過指令碼影響 www.microsoft.com/ 域中的其他頁面,但卻不能作用於其他網域中的頁面。 DHTML物件模型用 document.domain 屬性來強制限制式:只有擁有相同 domain 屬性的頁面能夠自由地相互作用。(包括URL協議也必須相同,比如HTTP頁面不可以與HTTPS的內容互動作用。) 當網頁作者指定 document.domain 屬性為網域名稱的後半部分時,讀寫許可將可以擴充至次層網域(second-level domain )。例如:[microsoft.com] 上的一個頁面可以把 document.domain 屬性由初始的“www.microsoft.com”改為“microsoft.com”,就可以讀寫 home.microsoft.com 上的頁面,或者以 microsoft.com 結尾的所有其他域中的頁面,只要那些頁面的 document.domain 屬性值也設定為 microsoft.com 。因為只有名字以 microsoft.com 結尾的網站上的文檔才能設定其 document.domain 屬性為 microsoft.com ,所以確保了只有同一個服務提供者的頁面才能互相提供許可權並互動操作。document.domain 屬性值不能比次層網域更短(比如“com”),因為這樣會使許可權超越於單一的服務提供者。比如:一個國際網域名稱 www.microsoft.co.jp/ ,最大的操作許可權是次層網域"microsoft.co.jp"(而不是"co.jp")。 這裡整理了一些方法,來解決這個問題: 1.設定document.domain。 前提條件:兩個頁面同屬於一個基礎域(例如都是xxx.com,或是xxx.com.cn);同一協議(例如都是http);同一連接埠(例如都是80)。 方法:設定兩個頁面的document.domain都設定為自己所在的基礎網域名稱。 例子:aaa.xxx.com裡面的一個頁面需要調用bbb.xxx.com裡的一個對象,則將兩個頁面的document.domain都設定為xxx.com,就可以了。 2.在伺服器端設定代理 跨域的請求同樣發送到本機伺服器端,由伺服器端的代理來請求相應的資料,然後發送給瀏覽器端。這樣實際上瀏覽器端的所有請求都是發到相同的域,在伺服器端代理的協助下,實現了跨域的能力。 3.使用apache伺服器的mod_rewrite http://doc.99net.net/doc/service/1076303865/1076476868.html 4.這邊還有一個方法 http://johnvey.com/features/deliciousdirector/web-service-broker.html 哪位大俠有比較牛的解決方案,快點跟貼!! |