我正在使用com.google.gwt.user.client.ui.Frame
&使用frame.setUrl(FILEPATH).
我尝试了这段代码,但它不起作用:
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);
答案 0 :(得分:1)
列表中的节点数。有效子节点索引的范围是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应用程序的来源不同,则无法使用。