java - 浏览器后退按钮如何处理自动 URL 重定向?

标签 java url browser javafx redirect

我正在尝试创建一个浏览器来练习 JavaFX。我用 Stack 实现了后退按钮。

  1. 当页面的URL发生变化时,将url添加到Stack(java.util.Stack)
  2. 按下后退按钮时,从 Stack 中弹出 1 项并显示页面

但这在 URL 重定向的情况下不起作用。例如。我输入http://www.google.com ,它会自动重定向到 http://www.google.co.in (印度)。这会在堆栈中产生 2 个条目,这会破坏“后退”按钮逻辑,因为页面相同但取自不同位置。

请帮我解决这个问题。

感谢您的帮助

webEngine.locationProperty().addListener(new ChangeListener<String>(){

        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
            //urlField is a text Field
            urlField.setText(newValue);
            addURLToStack(oldValue);
            if(backButtonStack.size() ==1){ //means on last url of Stack
                backButton.setDisable(true);
            }
            else{
                backButton.setDisable(false); 
            }}      
    });
 backButton.setOnMouseClicked(new EventHandler<MouseEvent>(){

        @Override
        public void handle(MouseEvent event) {
            if(backButtonStack != null && !backButtonStack.isEmpty()){
                String poppedURL = backButtonStack.pop();
                webEngine.load(poppedURL);

            }
        }

    });
private void addURLToStack(String url) {
    if(backButtonStack == null){
        backButtonStack = new Stack<String>();
    }

    backButtonStack.push(url);
}

最佳答案

您不需要解决这个问题。

JavaFX WebEngine有一个WebHistory对象,它具有完全管理历史记录所需的所有 API,并且它应该注意不要将重定向的 URL 添加到历史记录中。而且,如果您不想使用它,可以使用 webengine.executeScript("history.back()"); 让引擎的 JavaScript 引擎为您处理导航。

Chris Gerken 所说的关于监视 http 状态返回代码以确定是否将该对象放入历史记录中的说法是正确的。 JavaFX WebEngine 中的困难在于 http 状态返回代码发生在网络层,并且不通过 WebEngine 接口(interface)公开。因此,如果您只是像现在这样监视 WebEngine 的位置属性,那么很难获得高质量的导航界面。当我实现 JavaFX WebBrowser 以获得 JavaFX 体验时我发现了这一点,并且 my browser's history mechanism using an ObservableList with a current index pointer与您在问题中指出的问题完全相同。如果我今天要再次实现相同的功能,我只会使用后续 JavaFX 版本提供的新 WebHistory 功能,而不是编写自己的功能。

关于java - 浏览器后退按钮如何处理自动 URL 重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14170832/

相关文章:

javascript - “webrtc_android”在构建时发出错误消息

Javascript 书签删除部分网址

java - 浏览器使用 JEditorPane 强制蓝色背景

php - 如何启用干净的网址? (VPS - Debian 9)

http - 浏览器中的本地 HTTP 重定向

delphi - 如何为Delphi的WebBrowser制作自定义菜单?

Java - XML 数字签名更多引用资料

java - 不同类的方法相互使用的良好做法是什么?

java - 向 JTable 添加一列,UI 不会改变

css - 平板电脑上的复选框奇怪的错误