2011-08-25 22 views
1

我想要一個簡單和輕量級的方式,將跨域請求發送到我的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。

+0

如果兩個幀被引用相同的文件在您的服務器上,它只會被下載並緩存一次 –

+0

內存使用情況如何?加載兩次相同的,不小的文件會佔用可以保存的內存。這在移動瀏覽器中更爲重要。 – leods92

+0

我只能通過猜測來回應。我從來沒有想過文件是否被加載到內存兩次,我想它不是。我試圖在網上查看信息,但我無法獲得正確的搜索條件。 –

回答

1

文件TEST.HTM

<iframe name='my-iframe' src='test2.htm' onload="child();"></iframe> 
<script> 
function child(){ 
    alert(window.frames['my-iframe'].my_var); 
    window.frames['my-iframe'].my_var = 'bye'; 
    window.frames['my-iframe'].show_var(); 
} 
</script> 

文件test2.htm

<script> 
window.my_var = 'hi'; 
function show_var(){ 
    alert(my_var); 
} 
</script> 

上面的代碼將提醒 'HI',然後 '再見'

+0

謝謝!回答了我的問題。 **可以在子iframe中設置屬性**。對於那些想知道我是否得到我想要的工作的人:我沒有:(。仍在嘗試。我到目前爲止所能做的就是克隆整個jQuery並附加到child-iframe。問題是資源的重載不斷髮生(就像使用腳本標記加載整個框架一樣)。我現在要做的是在iframe中創建一個獨特的XHR對象,並從主域調用它,但目前爲止沒有成功... – leods92

相關問題