JS如何跨域操作DOM?

我有一個類似於webQQ的web桌面應用框架,現在打算寫一套給第三方應用的API。(界面模式可以參考webQQ)

因為第三方應用都是一個個用iframe模擬的窗口在頁面上顯示,API需要做的就是可以操作主窗口,比如可以關閉應用,最小化應用這類的。就類似webQQ的API(API - WebQQ),但是能力有限,查了很多跨域的文章,也理不出個頭緒,希望有人能給些指點,如何實現這一個API。

我現在能想到的幾個難點:

1、JS如何跨域操作DOM

2、如果實現上一條問題,主窗口能否知道每個操作請求是來自哪個iframe。因為每個iframe都是一個應用,如果我在某個應用里操作要隱藏當前自己的iframe,主窗體如何知道是哪個iframe


postMessage 實現這個很容易...

主創體如何知道來自哪個iframe 的問題很好辦. 通信時自己寫一套通信協議. 強制每個message都帶有發出消息方的渠道id即可. 你自身有對應的 渠道id 到iframe的 映射數據. 就可以做到了

至於渠道id如何來實現. guid也行. 或者因為你是平台. 所以你有權給接入放發放某個固定id. 這些方案都是可行的.


ie8+及其它瀏覽器建議使用HTML5的postMessage()方法,該方法很方便的進行跨域通信,簡單講就是和其它iframe互相發送/接收消息,這樣你就可以在接收到消息後在iframe里進行修改dom了。如果你還想要支持IE6,IE7的話,推薦閱讀一下一種通用的iframe跨域通信方法


使用中間層iframe來跨域操作。

假設你的網站是A。com iframe裡面是B。com

要用iframe操作父頁面,在iframe中再生成一個iframe ,domain是A。com,

然後通過url hash 給這個iframe里的iframe傳命令,然後iframe里的iframe可以用parent.parent.window 獲取到最外層網站的window對象,就可以操作dom了。

這是比較老的方法,ie時代的。。。


可以參考 百度框計算 使用iframe 的方式


推薦閱讀:

學習js看書籍好還是上機直接敲代碼好?
前端在什麼情況下應該跳槽?
怎麼才能在四個月內把web前端學好學深入?
如何看待Apache再次接受阿里開源產品捐贈 移動開發框架Weex進入孵化
CSS3 display:flex和display:box有什麼區別?

TAG:前端開發 | JavaScript | iframe | 跨域 |