2011-10-12 271 views
2

我有一个网页,其中运行gwt应用程序的iframe。该网页有一个<div id="head">。无法滚动iframe(预期),因此网页的高度为1000像素。在最下方有一个按钮,当有人点击该按钮时(我注意:按钮位于gwt应用程序中),我想要滚动到顶部。如何滚动到GWT中的div ID

这意味着iframe需要强制父窗口滚动到顶部。我试着用这样一个jsni功能:

public static native void scrollToTop() /*-{ 
     $wnd.top.scrollTo(0,0); 
    }-*/; 

但是这并没有奏效。所以我的新想法是滚动到div ID“标题”。有谁知道如何做到这一点?

我想它是这样的:

document.getElementById('header').scrollIntoView(); 

,但似乎没有工作(因为它应该在JSNI的方式?)。

感谢您的任何意见!

回答

4

由于GWT在iframe中运行,因此document引用了GWT的iframe,而不是您的“HTML主机页面”,因此失败。您必须在JSNI中使用$doc来引用文档(就像$wnd而不是window)。

但是你实际上并不需要JSNI;普通老Java/GWT会这样做:

Document.get().getElementById("header").scrollIntoView(); 
+0

除非在包含GWT运行的iframe的网页中显示“标题”。然后你无法访问它。 –

+0

用普通的旧/ GWT方式,我得到了一个UmbrellaExeption。我的感觉是,它无法找到父窗口中定义的div id =“header”。 – mkn

+0

@HilbrandBouwkamp:“标题”位于包含iframe的网页中。这是我想解决的问题。我也尝试了在父窗口(包含iframe的网页)中使用javascript,并从iframe中调用该javascript函数。但是,我有不安全的访问异常,因为iframe中的网页和网页来自不同的地址。我真的必须以某种方式解决这个问题,没有iframe没有解决方案:( – mkn

0

最后我找到了解决方案。您必须在网站顶部(iframe中的网站)设置一个锚点。请查看我的其他post了解更多详情。

P.S.我希望你看到这篇文章的重要性,并且赞扬它。这会为其他人节省很多时间。

+0

请注意,使用锚会创建一个新的历史记录条目 –

+0

它不会那样做,但它解决了GWT嵌入到iframe中时的聚焦问题。当您在iframe中有网站并且在iframe中单击按钮切换网站时,您可以执行其他许多人建议的操作(使用onload标记iframe标签)如果解决方案很明显,那么我早就预料到了这个解决方案,但没有人能够解决它现在我发现了这个简单的解决方案,我只想让其他人(在iframe中使用gwt)不要花太多时间来搞清楚这一点。 – mkn

+0

是的,我明白。这只是为了确保人们了解后果。另请注意,只有当iframe中的网页位于另一个域时才会出现此问题。因为在那种情况下你不能访问'top.scrollTo'。 –