【发布时间】:2015-03-05 10:14:12
【问题描述】:
我正在编写一个基于 Javafx 的 Web 浏览器。我想获取当前在 WebEngine 中打开的网页的 TITLE。 谢谢你:)
【问题讨论】:
标签: javafx javafx-8 javafx-webengine
我正在编写一个基于 Javafx 的 Web 浏览器。我想获取当前在 WebEngine 中打开的网页的 TITLE。 谢谢你:)
【问题讨论】:
标签: javafx javafx-8 javafx-webengine
更好更好的方法是使用WebEngine.getTitle()
这是一个如何使用它的示例:
stage.titleProperty().bind(webView.getEngine().titleProperty());
【讨论】:
null。
加载文档后,您可以使用 DOM API 查找标题。 (我通常不喜欢 DOM API,但您可以这样做。)
private String getTitle(WebEngine webEngine) {
Document doc = webEngine.getDocument();
NodeList heads = doc.getElementsByTagName("head");
String titleText = webEngine.getLocation() ; // use location if page does not define a title
if (heads.getLength() > 0) {
Element head = (Element)heads.item(0);
NodeList titles = head.getElementsByTagName("title");
if (titles.getLength() > 0) {
Node title = titles.item(0);
titleText = title.getTextContent();
}
}
return titleText ;
}
【讨论】:
error: incompatible types: org.w3c.dom.Document cannot be converted to sun.plugin.dom.core.Document 和 error: incompatible types: org.w3c.dom.Node cannot be converted to sun.plugin.dom.core.Node @James_D
org.w3c.dom 导入,而不是私有的 sun.plugin 类)。
org.w3c.dom 导入 Node title = titles.item(0); 和 `Document doc = webEngine.getDocument();如果你能提供我确切的进口,将不胜感激
import sun.plugin.dom.core.Document;。应该是import org.w3c.dom.Document;。 Node 也是如此。
import org.w3c.dom.Document; 和 import org.w3c.dom.Node; 但是为什么 Netbeans 找不到这个导入,它给出了一个提示 cannot find symbol
只是@James_D 出色答案的不同实现(少一点冗长,多一点 Java 8 风格):
private String getTitle(WebEngine webEngine) {
Document doc = webEngine.getDocument();
NodeList heads = doc.getElementsByTagName("head");
String titleText = webEngine.getLocation(); // use location if page does not define a title
return getFirstElement(heads)
.map(h -> h.getElementsByTagName("title"))
.flatMap(this::getFirstElement)
.map(Node::getTextContent).orElse(titleText);
}
private Optional<Element> getFirstElement(NodeList nodeList) {
if (nodeList.getLength() > 0 && nodeList.item(0) instanceof Element) {
return Optional.of((Element) nodeList.item(0));
}
return Optional.empty();
}
【讨论】: