如何使用setUrl()从我附加到GWT框架的HTML文件中检索元素?

时间:2014-05-06 07:09:04

标签: java eclipse gwt

我正在使用com.google.gwt.user.client.ui.Frame&使用frame.setUrl(FILEPATH).

显示在HTML文件中

我尝试了这段代码,但它不起作用:

frame.getElement().getElementsByTagName("table").getLength()

我想获取HTML文件中特定元素的宽度,并将框架的宽度设置为相同。

我正在使用Eclipse和GWT插件。

编辑:我用这些做到了:

IFrameElement iframe = IFrameElement.as(frame.getElement());
Document frameDocument = iframe.getContentDocument();
String width= frameDocument.getElementsByTagName("table").getItem(0).getOffsetWidth() + "px";
frame.setWidth(tmpWidth);

3 个答案:

答案 0 :(得分:1)

看看NodeList#getLength()州:

  

列表中的节点数。有效子节点索引的范围是0到length-1(包括0和length)。

您可以尝试Element#getOffsetWidth()Element#getStyle()然后Style#getWidth()

示例代码:

NodeList<Element> nodeList = frame.getElement().getElementsByTagName("table");

for (int i = 0; i < nodeList.getLength(); i++) {
    Element element = nodeList.getItem(i);
    System.out.println(element);
    System.out.println(element.getOffsetWidth());
    System.out.println(element.getStyle().getWidth());
}

答案 1 :(得分:1)

另一种方法。为了等到iframe的内容已经加载(否则DOM搜索可能为空),您可能有兴趣加入LoadHandler。然后,您可以使用GQuery选择器(如jQUery)在框架内搜索表元素,最后设置宽度。

以下是代码:

    final Frame yourFrame = new Frame("http://www.example.your.url.com");
    yourFrame.addLoadHandler(new LoadHandler() {

      @Override
      public void onLoad(LoadEvent event) {
        int elemWidth = GQuery.$(yourFrame).contents().find("table").width();
        yourFrame.setWidth(elemWidth+"px");

      }
    });

更新:随着@Manolo的评论!

答案 2 :(得分:1)

首先,正如@apanizo所说,你需要使用LoadHandler来确保文档已加载到框架中。

然后,要阅读框架的文档,您必须使用IFrameElement.as(frame.getElement())frame.getElement().<IFrameElement>cast(),然后使用getContentDocument()

IFrameElement.as(frame.getElement()).getContentDocument().getElementsByTagName("table").getLength()

最后一点:如果框架中加载的文档与GWT应用程序的来源不同,则无法使用。