完全调试通过了书签页收藏功能(书签数据存放在本地数据文件中)

This commit is contained in:
free will committed 2020-11-25 22:22:02 +08:00
1 parent 2d5b5e9c9d
commit cb700a39fc
9 files changed
+209 -18

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
%E7%99%BE%E5%BA%A6%E4%B8%80%E4%B8%8B%EF%BC%8C%E4%BD%A0%E5%B0%B1%E7%9F%A5%E9%81%93 https%3A%2F%2Fwww.baidu.com%2F
%E5%8D%B0%E5%BA%A6%E5%86%8D%E6%AC%A1%E7%A6%81%E7%94%A8%E4%B8%AD%E5%9B%BDAPP+%E5%A4%96%E4%BA%A4%E9%83%A8%E5%9B%9E%E5%BA%94_%E7%99%BE%E5%BA%A6%E6%90%9C%E7%B4%A2 https%3A%2F%2Fwww.baidu.com%2Fs%3Fcl%3D3%26tn%3Dbaidutop10%26fr%3Dtop1000%26wd%3D%E5%8D%B0%E5%BA%A6%E5%86%8D%E6%AC%A1%E7%A6%81%E7%94%A8%E4%B8%AD%E5%9B%BDAPP+%E5%A4%96%E4%BA%A4%E9%83%A8%E5%9B%9E%E5%BA%94%26rsv_idx%3D2%26rsv_dl%3Dfyb_n_homepage%26hisfilter%3D1
%E6%98%8E%E5%B9%B4%E6%94%BE%E5%81%87%E5%AE%89%E6%8E%92%E5%87%BA%E7%82%89%21%E4%BA%94%E4%B8%80%E8%BF%9E%E4%BC%915%E5%A4%A9_%E7%99%BE%E5%BA%A6%E6%90%9C%E7%B4%A2 https%3A%2F%2Fwww.baidu.com%2Fs%3Fcl%3D3%26tn%3Dbaidutop10%26fr%3Dtop1000%26wd%3D%E6%98%8E%E5%B9%B4%E6%94%BE%E5%81%87%E5%AE%89%E6%8E%92%E5%87%BA%E7%82%89%21%E4%BA%94%E4%B8%80%E8%BF%9E%E4%BC%915%E5%A4%A9%26rsv_idx%3D2%26rsv_dl%3Dfyb_n_homepage%26hisfilter%3D1
+21 -8
View File
@@ -11,11 +11,20 @@
<hr>
</body>
<script>
function testShow() {
var test1={id:"1",title:"百度两下",urlString:"https://www.baidu.com"};
var test2={id:"2",title:"淅沥淅沥",urlString:"https://www.bilibili.com"};
var test3={id:"3",title:"码云",urlString:"https://gitee.com/"};
var bk=[test1,test2,test3];
// function testShow() {
// var test1={id:"1",title:"百度两下",urlString:"https://www.baidu.com"};
// var test2={id:"2",title:"淅沥淅沥",urlString:"https://www.bilibili.com"};
// var test3={id:"3",title:"码云",urlString:"https://gitee.com/"};
// var bk=[test1,test2,test3];
// showBookmarks(bk);
// }
var namecache="bookmark_name";
function setCacheName(name) {
namecache=name;
}
function addOneBookmark(bookmark_url) {
var bookmark={id:"",title:namecache,urlString:bookmark_url};
var bk=[bookmark];
showBookmarks(bk);
}
// 唯一ID产生器
@@ -32,8 +41,9 @@
var object=bk[i];
// 获取元素:链接
var li=document.createElement("li");
li.innerHTML=(object.title+" "+object.urlString).link(object.urlString)+" ";
li.innerHTML=object.title+" "+(object.urlString).link(object.urlString)+" ";
li.id=g();
javaSetter.addMap(li.id,object.urlString);
li.style="display:inline;";
// 获取元素:按钮
var btn=document.createElement("button");
@@ -41,7 +51,10 @@
btn.id=g();
btn.style="background-color:red;color:white";
btn.onclick=function () {
alert(this.id);
// alert(this.id);
// 先执行删除数据的操作
javaSetter.deleteBookmarkById(this.id-1);
// 再删除页面元素
document.getElementById(this.id-1).remove();
document.getElementById(this.id).remove();
};
@@ -55,6 +68,6 @@
ul.appendChild(br);
}
}
testShow();
// testShow();
</script>
</html>
@@ -37,7 +37,17 @@ public class Bookmark {
bookmarks.add(new BookmarkModel(name, url));
}
public void addOneBookmark(BookmarkModel bookmarkModel){
bookmarks.add(bookmarkModel);
// 判断是否已经存在该标签
boolean flag=false;
for(int i=0;i<bookmarks.size();i++){
if(bookmarks.get(i).getUrl().equals(bookmarkModel.getUrl())){
flag=true;
}
}
// 不存在,则加入
if(!flag) {
bookmarks.add(bookmarkModel);
}
}
/**
@@ -17,12 +17,14 @@ import java.util.List;
public class BookMarkUtil {
// 书签数据保存到的地址
public static String bookmarksFilePath=SettingPropertyUtil.settingPath +"BookmarksData";
// private static String bookmarksFilePath=SettingPropertyUtil.settingPath +"BookmarksData";
private static String bookmarksFilePath="." + File.separator + "min" + File.separator +"BookmarksData";
/**
* 从本地文件中读取所有标签页数据
*/
private static Bookmark readBookMarks(){
public static Bookmark readBookMarks(){
confirmFileExistence(bookmarksFilePath);
Bookmark bookmark=new Bookmark();
try {
FileInputStream inputStream = new FileInputStream(bookmarksFilePath);
@@ -58,11 +60,50 @@ public class BookMarkUtil {
*/
private static void saveWholeBookmarks(Bookmark bookmark){
List<Bookmark.BookmarkModel> bookmarks=bookmark.getBookmarks();
clearFileContent(bookmarksFilePath);
for(int i=0;i<bookmarks.size();i++){
saveNewBookMark(bookmarks.get(i));
}
}
/**
* 确认某个需要存在的文件存在:不存在则自动创建之,返回false;否则返回true
* @return
*/
private static boolean confirmFileExistence(String fileName){
File file =new File(fileName);
boolean flag=true;
try {
if(!file.exists()) {
file.createNewFile();
flag=false;
}
} catch (IOException e) {
e.printStackTrace();
flag=false;
}
return flag;
}
/**
* 清空某个文件的内容
* @param fileName
*/
private static void clearFileContent(String fileName) {
File file =new File(fileName);
try {
if(!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter =new FileWriter(file);
fileWriter.write("");
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 存一个标签页的信息到本地
*/
@@ -70,7 +111,7 @@ public class BookMarkUtil {
// 向文件中写入新的标签页
try {
File file = new File(bookmarksFilePath);
FileOutputStream fos = null;
FileOutputStream fos;
if (!file.exists()) {
file.createNewFile();//如果文件不存在,就创建该文件
fos = new FileOutputStream(file);//首次写入获取
@@ -4,7 +4,9 @@ package cn.minbrowser.view;
* @author wefree
*/
import cn.minbrowser.MainApp;
import cn.minbrowser.model.Bookmark;
import cn.minbrowser.protocol.MinURL.MinURLStreamHandlerFactory;
import cn.minbrowser.util.BookMarkUtil;
import cn.minbrowser.util.CustomUrlUtil;
import cn.minbrowser.view.minibrowser.MiniTab;
import javafx.application.Platform;
@@ -42,6 +44,8 @@ public class NavigationBarController implements Initializable {
private boolean isShowingSettingList;
// 标记收藏标签页的弹窗的显示状态
private boolean isShowingCollectingBookmark;
// 保存所有标签收藏页的信息
public Bookmark bookmark;
// 收藏标签页
@FXML
@@ -60,6 +64,8 @@ public class NavigationBarController implements Initializable {
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
registerMinUrl();
// 加载标签收藏页的所有数据
bookmark= BookMarkUtil.readBookMarks();
}
/**
@@ -299,8 +305,8 @@ public class NavigationBarController implements Initializable {
*/
public void showBookmarkPane(String name, String url, Object userData) {
if(!isShowingCollectingBookmark) {
Double width = bookmarkPane.getScene().getWidth();
AnchorPane.setLeftAnchor(bookmarkPane, 500D);
// Double width = bookmarkPane.getScene().getWidth();
AnchorPane.setLeftAnchor(bookmarkPane, 900D);
bookmarkAddress.setText(url);
bookmarkName.setText(name);
bookmarkPane.setVisible(true);
@@ -323,6 +329,10 @@ public class NavigationBarController implements Initializable {
*/
@FXML
private void saveBookmark() {
Bookmark.BookmarkModel bookmarkModel=new Bookmark.BookmarkModel(
bookmarkName.getText().trim(),bookmarkAddress.getText().trim());
BookMarkUtil.saveBookMark(bookmarkModel);
bookmark=BookMarkUtil.readBookMarks();
hideBookmark();
}
}
+17 -2
View File
@@ -1,9 +1,13 @@
package cn.minbrowser.view;
import cn.minbrowser.model.Bookmark;
import cn.minbrowser.util.BookMarkUtil;
import cn.minbrowser.util.FilePermissionUtil;
import cn.minbrowser.view.login.LoginHandler;
import cn.minbrowser.view.login.RegisterHandler;
import java.util.List;
import static cn.minbrowser.util.FilePermissionUtil.getRootPath;
/*
@@ -13,7 +17,18 @@ public class TestMain {
public static void main(String[] args) {
// RegisterHandler.handleRegister("wefree","1","15239970973","kM2!rZ8^");
// LoginHandler.handleLogin("wefree","1");
FilePermissionUtil.getUserHome();
System.out.println(FilePermissionUtil.getRootPath());
// FilePermissionUtil.getUserHome();
// System.out.println(FilePermissionUtil.getRootPath());
// for(int i=1;i<6;i++) {
// Bookmark.BookmarkModel bookmarkModel = new Bookmark.BookmarkModel(
// "百度一下"+i, "https://www.baidu.com"+i);
// BookMarkUtil.saveBookMark(bookmarkModel);
// }
Bookmark bookmark= BookMarkUtil.readBookMarks();
List<Bookmark.BookmarkModel> bookmarkModels=bookmark.getBookmarks();
for(int i=0;i<bookmarkModels.size();i++){
Bookmark.BookmarkModel bookmarkModel=bookmarkModels.get(i);
System.out.println(bookmarkModel.getName()+" "+bookmarkModel.getUrl());
}
}
}
@@ -1,5 +1,6 @@
package cn.minbrowser.view.minibrowser;
import cn.minbrowser.model.Bookmark;
import cn.minbrowser.protocol.util.MinUrlUtil;
import cn.minbrowser.util.ConnectTestUtil;
import cn.minbrowser.util.FilePermissionUtil;
@@ -7,6 +8,7 @@ import cn.minbrowser.view.MainPageHTMLController;
import cn.minbrowser.view.NavigationBarController;
import cn.minbrowser.view.login.LoginHTMLController;
import cn.minbrowser.view.login.RegisterHTMLController;
import cn.minbrowser.view.setting.BookmarkHTMLController;
import cn.minbrowser.view.setting.SettingHTMLController;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
@@ -33,6 +35,8 @@ import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.LinkedList;
import java.util.List;
import static cn.minbrowser.util.CustomUrlUtil.*;
@@ -69,6 +73,7 @@ public class MiniTab extends Tab {
private LoginHTMLController loginHTMLController;
private RegisterHTMLController registerHTMLController;
private MainPageHTMLController mainPageHTMLController;
private BookmarkHTMLController bookmarkHTMLController;
public MiniTab(NavigationBarController navigationBarController){
this(HOME_URL,navigationBarController);
@@ -86,6 +91,7 @@ public class MiniTab extends Tab {
loginHTMLController=new LoginHTMLController(navigationBarController);
registerHTMLController=new RegisterHTMLController(navigationBarController);
mainPageHTMLController=new MainPageHTMLController();
bookmarkHTMLController=new BookmarkHTMLController(navigationBarController);
// 设置各组件在AnchorPane中的位置
AnchorPane.setLeftAnchor(webview, 0D);
AnchorPane.setRightAnchor(webview, 0D);
@@ -287,7 +293,7 @@ public class MiniTab extends Tab {
analysisAddress(INDEX_URL);
break;
case BOOKMARK:
// controller.showBookmarkPane(getText(), input.getText(), null);
navigationBarController.showBookmarkPane(getText(), input.getText(), null);
break;
}
});
@@ -337,6 +343,8 @@ public class MiniTab extends Tab {
input.setText(ERROR_URL);
}else if(url.contains("resources/html/Bookmarks/bookmarks.html")){
input.setText(Bookmarks_SHOW_URL);
setChangingBookmarkInfoListener();
showBookmarkInfoByListenEngineState();
}else {
try {
input.setText(URLDecoder.decode(url, "UTF-8"));
@@ -368,6 +376,30 @@ public class MiniTab extends Tab {
System.out.println("finished.");
}
/**
* 执行bookmarks.html中的js代码,显示配置信息
*/
private void showBookmarkInfoByListenEngineState() {
List<Bookmark.BookmarkModel> bookmarkModels=navigationBarController.bookmark.getBookmarks();
for(int i=0;i<bookmarkModels.size();i++){
Bookmark.BookmarkModel bookmarkModel=bookmarkModels.get(i);
System.out.println(bookmarkModel.getName()+" "+bookmarkModel.getUrl());
webview.getEngine().executeScript(
"setCacheName(\""+bookmarkModel.getName()+"\");");
webview.getEngine().executeScript(
"addOneBookmark(\""+bookmarkModel.getUrl()+"\");");
}
}
/**
* 将BookmarkHTMLController作为对象传入HTML中的JS,从而被JS调用
*/
private void setChangingBookmarkInfoListener(){
System.out.println("start setting js listener (bookmark.html) ...");
JSObject jsObject=(JSObject)webview.getEngine().executeScript("window");
jsObject.setMember("javaSetter",bookmarkHTMLController);
System.out.println("finished.");
}
/**
* 将LoginHTMLController作为对象传入HTML中的JS,从而被JS调用
*/
@@ -0,0 +1,61 @@
package cn.minbrowser.view.setting;
/*
* @author wefree
*/
import cn.minbrowser.model.Bookmark;
import cn.minbrowser.util.BookMarkUtil;
import cn.minbrowser.view.NavigationBarController;
import java.util.HashMap;
import java.util.Map;
/**
* 为bookmarks.html做数据传输
*/
public class BookmarkHTMLController {
private NavigationBarController navigationBarController;
// 存储对应前端数据的键值对
HashMap<String,String> dataMap=new HashMap<String, String>();
public BookmarkHTMLController(NavigationBarController navigationBarController){
this.navigationBarController=navigationBarController;
}
/**
* 删除一个标签页数据
* @param bookmark_url
*/
public void deleteBookmark(String bookmark_url){
System.out.println("接收到了HTML发来的登录请求(deleteBookmark):"+bookmark_url);
try {
Bookmark.BookmarkModel bookmarkModel=new Bookmark.BookmarkModel("",bookmark_url);
BookMarkUtil.rmBookMark(bookmarkModel);
navigationBarController.bookmark=BookMarkUtil.readBookMarks();
}catch (Exception e){
e.printStackTrace();
}
}
public void deleteBookmarkById(String id){
System.out.println("接收到了HTML发来的登录请求(deleteBookmarkById):"+id);
String bookmark_url=dataMap.get(id);
deleteBookmark(bookmark_url);
dataMap.remove(id);
}
/**
* 与前端同步的一个映射
* @param id
* @param bookmark_url
*/
public void addMap(String id,String bookmark_url){
System.out.println("接收到了HTML发来的登录请求(addMap):"+id+" "+bookmark_url);
try{
dataMap.put(id,bookmark_url);
}catch (Exception e){
e.printStackTrace();
}
}
}
@@ -17,6 +17,12 @@
.bookmark{
-fx-background-image: url(../image/plus_16.png);
}
.inner_pane{
-fx-border-radius: 3px;
-fx-border-color: dodgerblue;
-fx-border-style: solid;
-fx-background-color: white;
}
/*#backButton {*/
/*!*-fx-padding: 5 22 5 22;*!*/
/*-fx-border-color: white;*/