JxBrowser onStartLoadingFrame数据传递问题

时间:2018-05-16 05:37:29

标签: jxbrowser

我目前正在使用JxBrowser 6.19.1,我想问一下,当我第一次开始加载页面时,是否可以使用onStartLoadingFrame设置变量值。然后我将在页面中使用该数据。

例如:

    final JFrame frame = new JFrame("Hello World!");

    final Browser browser = new Browser();
    BrowserView view = new BrowserView(browser);

    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.add(view, BorderLayout.CENTER);
    frame.setSize(400, 300);
    frame.setVisible(true);

    browser.addLoadListener(new LoadAdapter() {
        @Override
        public void onStartLoadingFrame(StartLoadingEvent event) {
            browser.executeJavaScriptAndReturnValue("var data = 1"); // does not work every single time, real question
        }
    });
    browser.loadURL("echo.html");

我的echo.html将是这样的:

 <!DOCTYPE html>
 <html lang="en">
 <head>
    <title>Document</title>
 </head>
 <body>
     <h1>Echo Page</h1>
     <script>
         alert(data); 
     </script>
 </body>

问题来了,有时会提示警报,有时却没有。有谁知道为什么? (由于多头?)这是为了解决这个问题吗?

希望有人可以帮助我。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您需要在加载的网页上的任何其他JavaScript执行之前执行一些JavaScript代码,那么您应该使用onScriptContextCreated JavaScript上下文事件,如下所示:

browser.addScriptContextListener(new ScriptContextAdapter() {
    @Override
    public void onScriptContextCreated(ScriptContextEvent event) {
        event.getBrowser().executeJavaScript("var data = 1"); 
    }
});

在这种情况下,data JavaScript变量将被正确设置,网页上的脚本将始终按预期工作。