// ==UserScript== // @name 简法主页功能增强 // @namespace http://tampermonkey.net/ // @version 0.3 // @description 在简法主页上增加其他个性化设置 // @author 那年那兔那些事 // @match https://www.jianfast.com // @icon https://s3.bmp.ovh/imgs/2021/08/2a5feb8f5f886e70.png // @downloadURL none // ==/UserScript== (function() { //创建设置列表 var SettingsFn = function() { this.Options = { "EngineOnCurrentTab": true, //搜索引擎是否从当前标签页打开网页 "BookmarkOnCurrentTab": true, //点击书签是否从当前标签页打开网页 "AddNewSearchEngine": true, //是否添加新搜索引擎 "Engine": "", }; } //为SettingsFn添加新方法 SettingsFn.prototype = { //get方法获取设置列表 get: function(key) { return this.Options[key]; }, //set方法为设置类别修改属性 set: function(key, value) { this.Options[key] = value; } } //创建Settings var Settings = new SettingsFn(); //创建新搜索引擎列表 var EnginesFn = function() { this.NewEngineList = [{ "Name": "夸克", "Url": "https://quark.sm.cn/s?q=", "Img": "https://gss3.bdstatic.com/84oSdTum2Q5BphGlnYG/timg?wapp&quality=80&size=b150_150&subsize=20480&cut_x=0&cut_w=0&cut_y=0&cut_h=0&sec=1369815402&srctrace&di=dfe458fc945b48a3ba59df62e2012e66&wh_rate=null&src=http%3A%2F%2Fimgsrc.baidu.com%2Fforum%2Fpic%2Fitem%2Ff7246b600c33874451939b645e0fd9f9d72aa050.jpg" }, { "Name": "手机百度", "Url": "https://m.baidu.com/s?word=", "Img": "/static/home/images/searchChoice/baidu.svg" }]; //格式:在[]内前一个{}后面加英文“,”,然后再按照下列格式在“,”后添加新搜索引擎:{“Name”:搜索引擎名字,"Url":搜索引擎URL,"Img":搜索引擎图标} } //为EnginesFn添加新方法 EnginesFn.prototype = { //get方法获得新搜索引擎列表 get: function() { return this.NewEngineList; }, //set方法可以为NewEngineList添加NewEngine set: function(Name, Url, Img) { var len = this.NewEngineList.length; var newEngine = { "Name": Name, "Url": Url, "Img": Img }; this.NewEngineList[len] = newEngine; }, //search方法从新搜索引擎列表中按key搜索出相应部分 search: function(key) { var len; if (typeof key === "string") { len = this.NewEngineList.length; var res = -1; if (len !== 0) { for (let i = 0; i < len; i++) { if (this.NewEngineList[i].Name === key) { res = i; } } } return res; } else if (typeof key === "number") { len = this.NewEngineList.length; if (key < len) { return this.NewEngineList[key]; } else { return this.NewEngineList[len - 1]; } } else { return -1; } }, //change方法能改变打开网页方式 change: function() { var SearchBtn = document.getElementById("search-btn"); var SearchBar = document.getElementById("search"); if ((SearchBtn.name !== "newSearchBtn") && (SearchBar.name !== "newSearchBar")) { SearchBtn.onclick = function() { var searchOBJ = document.getElementById("search"); var newURL = searchOBJ.getAttribute("data-engine-start") + searchOBJ.value; location.href = newURL; } SearchBar.onkeydown = function(event) { if (event.keyCode === 13) { document.getElementById("search-btn").click(); } } SearchBtn.name = "newSearchBtn"; SearchBar.name = "newSearchBar"; SearchBtn.type = "text"; console.log('改变搜索引擎打开方式(当前页)成功!'); } }, select: function(Name, Url, Img, Flag) { var SearchType = document.getElementById("search-type"); var Search = document.getElementById("search"); var SearchMenu = document.getElementById("search-menu"); if ((SearchType !== null) && (Search !== null) && (SearchMenu !== null)) { SearchType.style.backgroundImage = "url(" + Img + ")"; Search.setAttribute("data-engine-start", Url); SearchMenu.style.display = "none"; localStorage.setItem("Engine", Name); localStorage.setItem("searchType", Flag); } }, //create方法创建新搜索引擎列表 create: function(Name, Url, Img) { var newEngine = document.createElement("div"); newEngine.setAttribute("class", "search-engine"); newEngine.setAttribute("data-engine-start", Url); newEngine.setAttribute("data-engine-end", ""); newEngine.innerHTML = "" + Name + ""; newEngine.onclick = function() { Engines.select(Name, Url, Img, "0"); }; return newEngine; }, //add方法能在原搜索引擎列表中添加新搜索引擎 add: function() { var MenuObj = document.getElementById("search-menu"); var List = Engines.get(); if (MenuObj !== null) { if (MenuObj.name !== "newEngine") { if (List.length !== 0) { for (let i = 0; i < List.length; i++) { var NewEngine = Engines.create(List[i].Name, List[i].Url, List[i].Img); MenuObj.appendChild(NewEngine); } MenuObj.name = "newEngine"; console.log('添加新搜索引擎成功!'); } } } }, //init方法获取cookies,并初始化页面 init: function(L) { var MenuObj = document.getElementById("search-menu"); var Name; var Url; var Img; var nameList = []; var urlList = []; var imgList = []; if (MenuObj !== null) { for (let i = 0; i < L; i++) { var MenuChild = MenuObj.children[i]; nameList[i] = MenuChild.innerText; urlList[i] = MenuChild.getAttribute("data-engine-start"); imgList[i] = MenuChild.children[0].src; MenuChild.onclick = function() { console.log("i:" + i); var SearchType = document.getElementById("search-type"); var Search = document.getElementById("search"); var SearchMenu = document.getElementById("search-menu"); if ((SearchType !== null) && (Search !== null) && (SearchMenu !== null)) { SearchType.style.backgroundImage = "url(" + imgList[i] + ")"; Search.setAttribute("data-engine-start", urlList[i]); SearchMenu.style.display = "none"; localStorage.setItem("Engine", nameList[i]); localStorage.setItem("searchType", i.toString()); } } } console.log('搜索引擎列表初始化成功!'); } var SelectEngine = localStorage.getItem("Engine"); if (SelectEngine === null) { SelectEngine = Settings.get("Engine"); } var SearchRes = Engines.search(SelectEngine); if (SearchRes !== -1) { var SearchType = document.getElementById("search-type"); var newEngineList = Engines.get(); Name = newEngineList[SearchRes].Name; Url = newEngineList[SearchRes].Url; Img = newEngineList[SearchRes].Img; Engines.select(Name, Url, Img, "0"); } } } //创建Engines var Engines = new EnginesFn(); //创建书签 var Bookmarks = { //为Bookmarks添加change方法,能改变书签打开方式 change: function() { var bookmarksOBJ = document.getElementsByClassName("site-wrap-a siteA siteAs"); if (bookmarksOBJ.name !== "newbook") { for (let i = 0; i < bookmarksOBJ.length; i++) { bookmarksOBJ[i].target = "_self"; if (i === (bookmarksOBJ.length-1)) { bookmarksOBJ.name = "newbook"; console.log('改变主页书签打开方式(当前页)成功!'); } } } } } //mainFn方法为整个脚本的入口 function mainFn() { //通过定时器修改网页数据 TimerID = setInterval(function() { var bookmarksOBJ = document.getElementsByClassName("site-wrap-a siteA siteAs"); var searchType = document.getElementById("search-type"); var searchMenu = document.getElementById("search-menu"); var searchOBJ = document.getElementById("search"); var SearchBtn = document.getElementById("search-btn"); if (RunFlag) { if ((bookmarksOBJ.length !== 0) && (searchType !== null) && (searchMenu !== null) && ( searchOBJ !== null) && (SearchBtn !== null)) { RunFlag = false; console.log("开始执行主程序"); Engines.init(searchMenu.children.length); if (Settings.get("EngineOnCurrentTab")) { Engines.change(); } if (Settings.get("BookmarkOnCurrentTab")) { Bookmarks.change(); } if (Settings.get("AddNewSearchEngine")) { Engines.add(); } } } }, 200); console.log("启动主程序定时器(ID:" + TimerID + ")"); //2s超时结束定时 setTimeout(function() { clearInterval(TimerID); console.log("2s超时,释放主程序定时器(ID:" + TimerID + ")"); }, 2000); } var TimerID = -1; var RunFlag = true; //执行mainFn方法 mainFn(); })();