Не удается загрузить изображения при использовании веб-редактора текста, такого как summernote, загруженного в WebView #javafx
Невозможно загрузить изображения или любые файлы при использовании текстового редактора на основе Web, такого как https://summernote.org/, загруженного в WebView #javafx.
Я заметил, что загрузка изображений / файлов работает нормально, когда я открываю файл summernote.html в своем браузере, но когда я пробую его внутри WebView {встроенного в мой проект}, изображения / файлы не загружаются в редакторе.
texteditor.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.web.WebView?>
<StackPane xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="patient.froala.TextEditorController">
<children>
<WebView fx:id="wv_texteditor" minHeight="300.0" minWidth="992.0" prefHeight="-1.0" prefWidth="-1.0" />
</children>
</StackPane>
Файл контроллера
package patient.summernote;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import java.net.URL;
import java.util.ResourceBundle;
public class TextEditorController implements Initializable {
@FXML private WebView wv_texteditor;
@Override
public void initialize(URL location, ResourceBundle resources) {
Platform.runLater((()->{
WebEngine webEngine=wv_texteditor.getEngine();
webEngine.load(getClass().getResource("summernote.html").toExternalForm());
}));
}
}
файл summernote.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- include libraries(jQuery, bootstrap) -->
<!-- include libraries(jQuery, bootstrap) -->
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script>
<!-- include summernote css/js -->
<link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.11/summernote.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.11/summernote.js"></script>
<body>
<div id="summernote">Hello Summernote</div>
<script>
$(document).ready(function() {
$('#summernote').summernote();
});
</script>
</body>
</html>
1 ответ
Я обнаружил ошибку после нескольких часов тестирования.
Code 4 FileReader: файл или каталог не могут быть прочитаны, как правило, из-за проблем с разрешениями, которые возникают после получения ссылки на файл (например, файл или каталог одновременно заблокированы другим приложением).
поэтому я использовал Java для доступа к файлам из локальной файловой системы. Имея файл, затем передавая его в Summernote через (javascript-java) мост, предлагаемый WebView, мне удалось вставить изображения.
btn_insertimg.setOnAction(event->{
File file=fileChooser.showOpenDialog(webview.getScene().getWindow());
if(file==null)
return;
System.out.println(file.getAbsolutePath());
String string= "file:\\" + file.getAbsolutePath();
//as the script eats the single backslash we should double it
//before doubling file:\C:\Users\Muhammad\Pictures\Army\1.jpg
//after doubling file:\\C:\\Users\\Muhammad\\Pictures\\Army\\1.jpg
//without doubling file:C:UsersMuhammadPicturesArmy.jpg
string=string.replaceAll("\\\\","\\\\\\\\");
System.out.println(string);
webEngine.executeScript("insertImg('"+string+"','1.jpg')");
});