获取 WebView 的页面历史记录

WebHistory history = webView.getEngine().getHistory();

历史基本上是条目列表。每个条目代表一个访问过的页面,它提供对相关页面信息的访问,例如 URL,标题和上次访问页面的日期。

该列表可以使用 getEntries() 方法获得。当 WebEngine 在网络上导航时,历史记录和相应的条目列表会发生变化。列表可能会根据浏览器操作进行扩展或缩小。列表公开的 ObservableList API 可以监听这些更改。

与当前访问的页面相关联的历史条目的索引由 currentIndexProperty() 表示。当前索引可用于使用 go(int) 方法导航到历史记录中的任何条目。maxSizeProperty() 设置最大历史记录大小,即历史记录列表的大小

下面是如何获取和处理 Web 历史记录项列表的示例。

ComboBox(comboBox)用于存储历史项。通过在 WebHistory 上使用 ListChangeListenerComboBox 将更新为当前的 WebHistory。在 ComboBox 上是一个 EventHandler,它重定向到所选页面。

final WebHistory history = webEngine.getHistory();

comboBox.setItems(history.getEntries());
comboBox.setPrefWidth(60);
comboBox.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent ev) {
        int offset =
                comboBox.getSelectionModel().getSelectedIndex()
                - history.getCurrentIndex();
        history.go(offset);
    }
});

history.currentIndexProperty().addListener(new ChangeListener<Number>() {

    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        // update currently selected combobox item
        comboBox.getSelectionModel().select(newValue.intValue());
    }
});

// set converter for value shown in the combobox:
//   display the urls
comboBox.setConverter(new StringConverter<WebHistory.Entry>() {

    @Override
    public String toString(WebHistory.Entry object) {
        return object == null ? null : object.getUrl();
    }

    @Override
    public WebHistory.Entry fromString(String string) {
        throw new UnsupportedOperationException();
    }
});