首页 > 解决方案 > 无法使用 java 将值设置为 JxBrowser localstorage

问题描述

我想在浏览器加载时将语言设置为浏览器,为此我将“语言”值设置为浏览器的本地存储。

这是浏览器初始化代码。

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 用于我的代码,因此我试图在加载浏览器后设置该值。

标签: javaweblocal-storagejxbrowser

解决方案


只有在 HTML 页面完全加载并在其上初始化 JavaScript 上下文后,才能访问 Web 本地存储。因此,要使用 Web 本地存储,您需要确保 HTML 页面已加载。

同时,该Browser.loadURL方法被异步调用。要确保网页完全加载,您必须使用该LoadListener.onFinishLoadingFrame()事件。

因此,您的问题发生是因为browser.getLocalWebStorage().setItem("language", "en");在页面加载之前被调用。


推荐阅读