JxBrowser onStartLoadingFrame Проблема с передачей данных - PullRequest
0 голосов
/ 16 мая 2018

В настоящее время я использую 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>

Вопрос возникает, иногда этоподсказывать предупреждение, иногда нет.Кто-нибудь знает почему?(Из-за Multitheading?) Есть ли какое-нибудь решение этой проблемы?

Надеюсь, кто-нибудь может мне помочь с этим.Благодарю.

1 Ответ

0 голосов
/ 16 мая 2018

Если вам нужно выполнить некоторый код JavaScript перед выполнением любого другого JavaScript на загруженной веб-странице, вам следует использовать контекстное событие onScriptContextCreated JavaScript, как показано ниже:

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

В этом случае переменная data JavaScript будет установлена ​​правильно, и скрипт на веб-странице всегда будет работать должным образом.

...