2010-06-09 47 views
3

我知道您可以使用Window.open()函數將其指向特定的URL來打開一個新的瀏覽器窗口。但是,是否可以打開包含GWT面板的新瀏覽器窗口?如果是的話,有人可以舉一個例子嗎?在包含Widget/Panel的GWT中打開一個新的瀏覽器窗口

+1

你爲什麼想要這樣做?你想/需要傳遞一些會話信息嗎?那麼,你總是可以將新窗口的URL指向GWT應用程序......「PopupPanel」(加上也許是「Frame」Widget)怎麼樣? – 2010-06-09 20:34:07

+0

我想創建一個「打印機友好」版本的頁面,並且將它放在一個單獨的窗口中會很好。我知道這可以通過其他方式完成,我只是想知道這是否可能。 – stuff22 2010-06-09 20:41:01

+0

我和伊戈爾有同樣的問題。嘗試避免打開新窗口(除非重定向到另一個網站),因爲這對用戶來說確實很煩人。我也建議PopupPanel – Zwik 2010-06-09 20:42:22

回答

1

這是我的想法。我在純JavaScript中實現了它,但是如果可以在JS中使用,那麼使用GWT也是可能的!

parent.html:

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Parent page</title> 
<script type="text/javascript"> 
    function openChild() { 
      window.mychild = window.open("print.html"); 
      setTimeout('setContent();', 2000); 
    } 
    function setContent() { 
      window.mychild.document.body.innerHTML = 
       '<b>Here is your dynamically generated print content</b>'; 
       // This could be produced by your main GWT module. 
    } 
</script> 
</head> 
<body> 
    <a href="#" onclick="javascript:openChild()">Open child window</a> 
</body> 
</html> 

print.html:

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Print view</title> 
</head> 
<body> 
    One moment please... 
</body> 
</html> 

請注意,我用的超時。這並不理想,因爲如果(非常小)的print.html需要更長的時間才能被抓取,那麼它會覆蓋動態設置的內容。我想,解決方案可以優化(但要確保子窗口是從同一個來源獲取的,否則就會遇到「同源策略」問題)。

+0

這實際上是一個好主意,Chris :)只要你希望只將靜態內容/ HTML放入該窗口中,它就應該很好地完成這項工作 - 任何事件處理程序等都不會被轉移(顯然)。我只是想補充一點,可以通過getElement()。getInnerHTML()來訪問任何Widget的innerHTML值。因此,要獲得全身標籤,可以使用'RootPanel.get()。getElement()。getInnerHTML()'。 – 2010-06-10 19:39:39

+0

GWT版本的[Window.open](http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/Window.html#open)太糟糕了,不返回任何東西! – djjeck 2012-08-29 16:51:46

相關問題