2009-06-26 17 views
0

我想要一個兒童JavaScript應用程序來更新它的父文檔。iframe如何更改其父代的URL片段(不會導致刷新)?

從本質上說,這是一個很簡單的問題:

  • JavaScript程序在它自己的文檔打開一個iframe 。
  • 另一個JavaScript程序將 加載到iframe中。
  • 第二程序需要在原始 頁面改變 片段(錨)。
  • 第一個程序,然後「去」到 新的片段(文件位置 被更新,但文件不是 刷新)。

在網頁多不勝也有如何做到這一點的描述,使用的技巧,比如:

window.parent.location.hash = "#" + string 

但我這樣做是IE的時候,父母似乎是清爽本身。我認爲網頁正在重新加載。

只是爲了讓這個有點棘手:

  • 我需要爲所有的瀏覽器(或最起碼IE和Firefox)解決方案。
  • 這兩個JavaScript程序實際上都是GWT網絡應用程序(所以我可以將特定的代碼綁定到不同的瀏覽器版本)。
  • 如果有必要,我可以做奇怪的事情來解決安全問題,父母和孩子將永遠彼此瞭解。孩子總是被父母打電話。

我已經嘗試了各種網頁上列出的一堆其他技巧,但迄今爲止似乎沒有什麼穩定和足夠簡單的實際部署。

回答

1

使用element.scrollIntoViewscrollTo根據您的瀏覽器。

+0

這很有趣,但我認爲GWT創建上飛錨,所以我沒有任何元素,直到我其實是去了那個片段。 – 2009-06-26 14:41:38

0

我發現在我的應用程序下面的JavaScript(由GWT生成):

function $initUrlCheckTimer(this$static){ 
    var historyImplRef = this$static; 
    var urlChecker = function(){ 
    $wnd.setTimeout(urlChecker, 250); 
    var hash = getLocationHash(); 
    if (hash.length > 0) { 
     var token = ''; 
     try { 
     token = historyImplRef.decodeFragment(hash.substring(1)); 
     } 
     catch (e) { 
     $wnd.location.reload(); 
     } 
     var historyToken = ($clinit_75() , $wnd.__gwt_historyToken || ''); 
     if (historyToken && token != historyToken) { 
     $wnd.location.reload(); 
     } 
    } 
    } 
    ; 
    urlChecker(); 
} 

我也注意到,在GWT的頂層文件要求下來到應用之一(生成的代碼到指定的父開始$ wnd,其中$ wnd.location是我的實際URL)。

我在想什麼(我可能是錯的這個)是GWT的歷史機甲涉及看着__gwt_historyToken,直到它的變化,然後更新應用程序。如果父母的位置發生變化,「其他事情」似乎也在強制重新加載。我不能僅僅改變文檔位置,也不要將它與GWT代碼整合起來。