Невозможно установить значения для локального хранилища JxBrowser, используя Java - PullRequest
0 голосов
/ 27 мая 2018

Я хочу установить язык для браузера, когда он загружается, и для этого я устанавливаю значение 'language' для локального хранилища браузера.

Вот код инициализации браузера.

BrowserPreferences.setChromiumSwitches("--disable-web-security",
        "--allow-file-access-from-files");

String randomStr = UUID.randomUUID().toString();
jxbrowserDataDirPath = BrowserPreferences.getDefaultChromiumDir() + "\\" + randomStr;

browser = new Browser(BrowserType.LIGHTWEIGHT, new BrowserContext(new BrowserContextParams(jxbrowserDataDirPath)));
final BrowserView browserView = new BrowserView(browser);
browser.setDialogHandler(new DefaultDialogHandler(browserView));
browser.setPopupHandler(new DefaultPopupHandler());

browser.getCacheStorage().clearCache();
this.add(browserView, BorderLayout.CENTER);

и после инициализации браузера я загружаю веб-страницу по URL, а затем устанавливаю значение для локального хранилища.

browser.loadURL("file:///" + FILE_LOCATION + File.separator + "setting.html"); 
browser.getLocalWebStorage().setItem("language", "en");

Но это значение не задается для локального хранилища, и я хочузнаете причину такого поведения?


Кроме того, когда я использую браузер loadListner, он отлично работает

browser.addLoadListener(new LoadAdapter()
    {
      @Override
      public void onDocumentLoadedInFrame(FrameLoadEvent arg0)
      {
        setLocalStorageValue(key, value);
      }
    });

, но я не могу использовать loadListner для своего кода по некоторым причинам, так что япытаюсь установить значение после загрузки браузера.

1 Ответ

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

Локальное веб-хранилище доступно только после полной загрузки HTML-страницы и инициализации на ней контекста JavaScript.Поэтому для использования локального веб-хранилища необходимо убедиться, что страница HTML загружена.

В то же время метод Browser.loadURL вызывается асинхронно.Чтобы убедиться, что веб-страница полностью загружена, вы должны использовать событие LoadListener.onFinishLoadingFrame().

Итак, ваша проблема возникает из-за того, что browser.getLocalWebStorage().setItem("language", "en"); был вызван перед загрузкой страницы.

...