使用Jxbrowser

时间:2017-11-09 09:47:48

标签: jxbrowser

我想听听地址的变化。到目前为止,我已经能够使用:

browser.addStatusListener((StatusEvent event) -> {
    listener.handle(browser.getURL());
});

创建自己的处理程序,在地址更改时调用该处理程序。但我刚刚发现,当片段添加到地址时,这种方法不起作用。例如。来自" http://example.com"的更改到" http://example.com#hello"不会导致StatusEvent。如何使用JxBrowser存档?

1 个答案:

答案 0 :(得分:0)

StatusListener类不是为跟踪地址更改而设计的。 为了处理当前的浏览器URL更改,我建议您注册自定义LoadListener并侦听DocumentLoadedInMainFrame事件,该事件指示在Browser实例中加载了具有新URL的新文档。捕获DocumentLoadedInMainFrame事件后,您可以获取浏览器URL调用Browser.getURL()方法。请查看下面的代码示例:

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
import com.teamdev.jxbrowser.chromium.events.LoadEvent;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class LoadHandlerSample {
    public static void main(String[] args) {
        Browser browser = new Browser();
        BrowserView view = new BrowserView(browser);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(view, BorderLayout.CENTER);
        frame.setSize(700, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        browser.addLoadListener(new LoadAdapter() {
            @Override
            public void onDocumentLoadedInMainFrame(LoadEvent event) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("Document loaded: " + event.getBrowser().getURL());
                    }
                });
            }
        });

        browser.loadURL("http://www.google.com");
    }
}