Как открыть ссылки в браузере веб-сайта внутри веб-обозревателя JavaFx
У меня есть этот VBox, содержащий контейнер WebView. Что я не могу понять, так это как заставить WebViewer открывать ссылки в новой вкладке или окне в любом браузере, не просматривая его в программе.
@FXML private VBox WebViewer;
public void initialize(URL location, ResourceBundle resources) {
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.load("http://google.com/");
WebViewer.getChildren().addAll(browser);
}
1 ответ
Решение
Я предполагаю, что вы уже поняли это, но способ, которым я бы это сделал, предполагает использование специального API-интерфейса JavaScript в WebEngine для вызова метода java и его открытия таким образом.
Создайте класс, как этот:
public class eagler {
public void open(String url) {
java.awt.Desktop.getDesktop().browse(url);
}
}
Затем добавьте это перед вашим webengine.load
метод:
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
JSObject win = (JSObject) webEngine.executeScript("window");
win.setMember("eagler", new eagler());
}
}
}
);
Теперь, когда вы хотите открыть внешнюю страницу...
<button onclick="eagler.open('http://bitly.com/98K8eH')">Click Me</button>