如果你擁有所有的網站,包括你的上傳服務器和你正在部署上傳器的網站,那麼也許一些簡單的DNS技巧可以幫助你克服。
- 比方說,例如您的上傳服務器域是:
upload.example.com
。
- 假設你的服務器是
www.example.com
。
在上述情況下,你可以通過設置document.domain屬性啓用跨站點腳本:
document.domain = "example.com";
這使得www.example.com與upload.example.com iframe來溝通。
假設您擁有網站,子域之間的通信能力可以幫助您在其他Web服務器之間進行通信。
如果域名不同,你會怎麼做?
假設如下:
upload.example.com
是上傳服務器。
www.domain.com
是您的網站,它是包含上傳器iframe的父文檔。
現在我們再次假設您擁有這兩個域名,或者至少可以訪問這些設置。使用我們上面介紹的有關在子域上啓用跨站點腳本的知識,您可以使用一些DNS技巧來提供幫助。
- 在您的DNS管理器中,爲
upload.domain.com
創建一個CNAME,並將該子域指向與upload.example.com
相同的服務器。完成後,upload.example.com
和upload.domain.com
都指向相同的服務器和PHP應用程序。
- 在
www.domain.com
,嵌入upload.domain.com
並設置document.domain="domain.com";
- 在
www.example.com
,嵌入upload.example.com
&設置document.domain="example.com";
你可以看到,在這兩種情況下,你的網站的域名相匹配的上傳域名和文檔。域屬性與域匹配。
當您撥打$('iframe', top.document).css('border', '1px green solid');
時,您將不會收到任何權限錯誤。
總之,只要確保無論您在哪個網站中嵌入上傳者iframe,您都爲該上傳者創建了與網站域匹配的CNAME別名,並且document.domain屬性在上傳者和網站。
可以使用document.referrer
屬性在iframe來動態確定父文檔的背景下,以確定哪些域屬性應設置爲:
// uploader file code
// array split by period to get domain ["http://uploader", "example", "com/iframe/uploadFile", "php"]
var domainSplit = document.referrer.split(".");
// the 2nd place in the array is the domain. You may need to improve this for deeper subdomains
document.domain = domainSplit[1];
注:我假設你」重新使用Apache和PHP。如果是這樣,您可以爲您的所有upload.XYZ.com
域創建ServerAlias條目。如果您使用的是其他服務器,則大多數服務器都有一些設置ServerAlias的方法。
如果框架來自其他域 – 2011-02-06 14:38:45
我不知道該如何猜測你沒看過演示。因爲當您檢查頁面上的元素時,您會注意到與父頁面交互的iFrame來自另一個域。 – 2011-02-07 20:14:19