java - 无法使用 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 用于我的代码,因此我试图在加载浏览器后设置该值。
解决方案
只有在 HTML 页面完全加载并在其上初始化 JavaScript 上下文后,才能访问 Web 本地存储。因此,要使用 Web 本地存储,您需要确保 HTML 页面已加载。
同时,该Browser.loadURL
方法被异步调用。要确保网页完全加载,您必须使用该LoadListener.onFinishLoadingFrame()
事件。
因此,您的问题发生是因为browser.getLocalWebStorage().setItem("language", "en");
在页面加载之前被调用。
推荐阅读
- php - php-如何将负数字符串转成int
- angular - 从 html 调用 TypeScript 函数时,它会循环更多时间
- c# - 如何从 SqlDataReader 获取 int32 和字符串。收到错误 System.IndexOutOfRangeException: 'StudentID'
- javascript - 如何使用时刻减去时间
- javascript - 如何处理 json 上嵌套数组对象形式的数据?
- c# - 如何创建虚拟(在内存中)二进制文件?
- php - 如何仅授予对我们网站的访问权限才能调用 .php 文件?
- java - 组合框在 Netbeans 中显示项目,但在 Jar 文件中为空
- python-3.x - 并行进程覆盖进度条 (tqdm)
- vue.js - 即使将显示条目更改为 10/25/50/100 并单击分页,如何避免表格为空?