背景

webview中加载html,html的js中使用了indexeddb,但是当前javafx webview不支持indexededdb。会报错 Console: [https://cc.c3663fbd.js:14] TypeError: indexedDB.open is not a function. (In ‘indexedDB.open(“ddd”,l)’, ‘indexedDB.open’ is undefined)

处理过程

思路是,找到一个java版本的indexddb…

2022年11月30日09:18:56 研究中

package sample;

import com.mashape.unirest.http.Unirest;

import com.mashape.unirest.http.exceptions.UnirestException;

import com.mohamnag.fxwebview_debugger.DevToolsDebuggerServer;

import com.sun.javafx.scene.web.Debugger;

import com.sun.javafx.webkit.WebConsoleListener;

import com.sun.javaws.IconUtil;

import javafx.beans.value.ChangeListener;

import javafx.beans.value.ObservableValue;

import javafx.concurrent.Worker;

import javafx.event.EventHandler;

import javafx.fxml.FXML;

import javafx.scene.web.WebEvent;

import javafx.scene.web.WebView;

import javafx.util.Callback;

import netscape.javascript.JSObject;

import org.w3c.dom.Document;

import java.net.URL;

import java.util.HashMap;

import java.util.Map;

class indexedDB{

private void open1(String var1,String var2){

System.out.println(2222);

}

private String open(String var1,String var2){

return "123123";

}

private boolean onsuccess(){

return true;

}

}

public class Controller {

@FXML

private WebView webView;

indexedDB ind=new indexedDB();

public void initialize() throws Exception {

webView.getEngine().setJavaScriptEnabled(true);

JSObject win = (JSObject) webView.getEngine().executeScript("window");

win.setMember("indexedDB", ind);// 设置变量

System.out.println(34234);

/**

* Console: [https://cc.c3663fbd.js:14] TypeError: indexedDB.open is not a function. (In 'indexedDB.open("ddd",l)', 'indexedDB.open' is undefined)

*/

WebConsoleListener.setDefaultListener(new WebConsoleListener() {

@Override

public void messageAdded(WebView webView, String message, int lineNumber, String sourceId) {

System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message);

}

});

webView.getEngine().documentProperty().addListener(new ChangeListener() {

@Override

public void changed(ObservableValue observable, Document oldValue, Document newValue) {

/**

* if (!document.getElementById('FirebugLite')){

* E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;

* E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('src', 'https://xxx.js');

* (document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);

* }

*/

// webView.getEngine().executeScript("if(!window.indexedDB) {console.log(\"Your browser does not support indexedDB.\");}");

});

URL url = getClass().getResource("xx1.html");

webView.getEngine().load("https://88");

// DevToolsDebuggerServer.startDebugServer(webView.getEngine().impl_getDebugger(), 51742);

}

/**

* 2022年11月28日15:44:10

* 1. webview不能加载页面,是因为不能使用indexeddb

* 2. 使用unirest请求报错:unable to find valid certification path to requested target

* 参考https://blog.csdn.net/qq_31122833/article/details/107176707

* cd C:\Program Files\Java\jdk1.8.0_341\jre\lib\security

* keytool -import -keystore cacerts -file C:\Users\88\Desktop\dm\98

* 密码changeit

*/

}

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: