JxBrowser onStartLoadingFrame 数据传递问题

JxBrowser onStartLoadingFrame Data Passing Issue

我目前使用的是 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>

问题来了,有时提示alert,有时不提示。有谁知道为什么? (由于多线程?)这有什么解决办法吗?

希望有人能帮助我。谢谢。

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

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

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