在GWT中重新加载iframe

时间:2012-06-14 14:34:59

标签: gwt iframe refresh frame reload

我目前正在开发一个GWT项目,我在我的应用程序中的iframe中显示一个HTML文件。这个HTML文件实际上是在显示时写入的,我希望能够重新加载框架,以便对HTML文件所做的更改反映在屏幕上。我能够以两种不同的方式执行这两种方式,在开发模式下运行时都可以工作,但是在部署项目时似乎都不起作用。

我尝试的第一种方法是将框架的URL设置为自身:

frame.setUrl(frame.getUrl());

我尝试使用JSNI的第二种方法:

public native void refresh() /*-{
  if($doc.getElementById('__reportFrame') != null) {
    $doc.getElementById('__reportFrame').src =
       $doc.getElementById('__reportFrame').src;
  }
}-*/;

部署时,框架将显示在一个窗口中,当文件写入完成后,将调用其中一个刷新方法,框架将刷新以包含完成的HTML文件。当我部署时,对刷新的调用不会重新加载帧的内容,但是如果我调出帧的上下文菜单(在Firefox中),然后进入“此帧”,然后单击“重新加载”,它会成功将帧重新加载到包含完成的HTML文件。我已经在多个版本的Firefox上测试了这个,没有任何运气。

有没有人有任何建议?为什么从一种模式到另一种模式的行为会有所不同?

感谢。

2 个答案:

答案 0 :(得分:0)

哇,谷歌搜索真的很快^^

  

您可以使用一些JSNI来执行此操作。创建一个方法,如

     

protected native void reloadIFrame(Element iframeEl)/ - {   iframeEl.contentWindow.location.reload(真); } - /;

 Then call it with your iFrame element

所以你发布的两次问题已经在这里回复了 http://groups.google.com/group/google-web-toolkit/browse_thread/thread/64aa7712890652d3

答案 1 :(得分:0)

我们有一个要求,其中一个GWT应用程序(父)在iframe中加载了另一个GWT应用程序(子)。子应用程序在执行某些数据库操作后必须刷新iframe。我们使用JSNI来完成同样的事情。

private native void refreshChild(String url)/*-{
 $wnd.location.href=url; 
}-*/

如果需要将子框架重定向到另一个网页,则可以相应地修改该URL。 我们确实尝试使用reload()方法,但它没有帮助。 上面的代码当然需要在子应用程序中编写。

相关问题