2010年10月28日 星期四

MapGuide_於firefox框架(iframe)抓取問題(getElementById)

如果你也是使用basic layout開發MapGuide的系統,那麼你就會遇到很多框架間抓取的問題,因為整個layout就是使用一大堆框架構成的,這一篇沒有要說明MapGuide框架的架構,而是當你使用basic layout又希望可以做介面上的調整時,就很有機會會使用到iframe,如果又好巧不巧"某人"希望你可以滿足全部的瀏覽器,這時候"理論上"你會遇到一個問題!就是在firefox使用時關於MapGuide Session的功能可能都會有問題,而你可能會認為IE跟Chrome都可以跑,只有firefox不能跑,所以應該是firefox的問題(因為我就是這樣跟自己講的);某天騎車回家的時候突然有想到這個"好像""一定"要解決的問題。

總之,去看錯誤訊息會發現,根本的原因其實是該頁面沒有取得Seesion Id,那為什麼ie跟Chrome可以正常執行?原因是firefox在框架之前互相抓取的時候,必須要使用getElementById的指令才可以取得我們以為他應該取得的項目(真抽象XD)

舉例來說,我想浮動視窗,所以利用兩個iframe,一個叫做F1裡面擺了MapGuide的框架,另一個叫做F2擺了製作的各項功能頁面,現在F2的功能頁面中,有項目點選後要連動F1的MapGuide,那該怎麼做?

IE裡面可以直接parent.F1.ViewerFrame.mapFrame.Refresh()之類的語法就可以:
1. 從F2回到上一層
2. 在該層找到F1這個iframe
3. 找到MapGuide的frame名稱(ViewerFrame)
4. 進到MapGuide的mapFrame裡面
5. 執行Refresh()的語法

但是在firefox卻不可行?不動就是不動...
而原因也就是剛剛所提,於firefox的框架在抓取時有些許不同,所以其實他根本沒有正確的進到MapGuide框架中執行重新整理的函式。
所以,怎麼抓?
parent.document.getElementById('F1').contentWindow.ViewerFrame.mapFrame.Refresh()

其實也就是在從F2跳到上一層後,必須利用getElementById的語法去指定要取得的Id(也就是F1這個iframe)。

那改成上面的方式之後,ie跟chrome可以動嗎?當然可以!YA......

沒有留言:

張貼留言