我想要一個簡單和輕量級的方式,將跨域請求發送到我的api地址(api.example.com),這是我的主域的子域(example.com)。是否可以從父框架(同一個document.domain)更改iframe的DOM?
我讀過很多技巧和黑客來處理XDR和它們與每個使用的瀏覽器不兼容的問題,但XDR對我來說仍然非常複雜。我不需要像easyXDM那樣完整/複雜的解決方案,我已經實施並且完美地完成了這項工作。
所以,我決定'啓用CORS',它解決了現代Webkit和Gecko瀏覽器的問題。但是一如既往,有IE瀏覽器(在這種情況下Opera也是),它與CORS不兼容。
因爲我想繼續使用jQuery AJAX方法,所以我搜索了一個允許XDR和jQuery方法一起使用的解決方案。然後,我通過benvinegar實現了一個非常好的解決方案,該解決方案替換了jQuery.ajax()方法以及所有依賴方法:https://gist.github.com/859940。他的腳本基於document.domain/iframe技巧。
在調用Ben提出的函數之前,我使用jQuery.support.cors測試了CORS支持(使用jQuery 1.6.2)。一切都很好,完美地工作。
我對上述鏈接腳本不滿意的唯一原因是我需要從api.example.com加載jQuery庫,我不想那樣做。我在一個文件中製作了一組縮小的JavaScript庫/插件/腳本,這些文件由example.com使用;這給了我2個選項(在api.example.com中使用jQuery):再次加載整個bundle或僅加載非緩存版本的jQuery。我也不喜歡。
我的問題是:當兩個幀具有相同的document.domain時,是否可以從父幀更改iframe的DOM?如果是這樣,我可以將jQuery從example.com克隆到子iframe中(api.example.com)?怎麼樣?或者我只是爲此而瘋狂,考慮到我所描述的內容,有更好的解決方案嗎?
謝謝大家, Leonardo。
如果兩個幀被引用相同的文件在您的服務器上,它只會被下載並緩存一次 –
內存使用情況如何?加載兩次相同的,不小的文件會佔用可以保存的內存。這在移動瀏覽器中更爲重要。 – leods92
我只能通過猜測來回應。我從來沒有想過文件是否被加載到內存兩次,我想它不是。我試圖在網上查看信息,但我無法獲得正確的搜索條件。 –