- // ==UserScript==
- // @name 简法主页功能增强
- // @namespace http://tampermonkey.net/
- // @version 0.23
- // @description 在简法主页上增加其他个性化设置
- // @author tutu辣么可爱
- // @include *://*.jianfast.*
- // @icon https://s3.bmp.ovh/imgs/2021/08/2a5feb8f5f886e70.png
- // @grant GM_openInTab
- // @grant GM_info
- // @license MIT
- // ==/UserScript==
-
- (function() {
- //addLoadEvent方法用于添加window.onload方法且window.onload不会相互覆盖覆盖
- function addLoadEvent(newOnload) {
- var oldOnload = window.onload;
- if (typeof window.onload != 'function') {
- window.onload = newOnload;
- } else {
- window.onload = function() {
- oldOnload();
- newOnload();
- }
- }
- }
- //store为本地存储功能
- var store = {
- //set方法在localstorage中修改指定JSON数据
- set: function(key, val) {
- if (!val) {
- return;
- }
- try {
- var json = JSON.stringify(val);
- if (typeof JSON.parse(json) === "object") { // 验证一下是否为JSON字符串防止保存错误
- localStorage.setItem(key, json);
- }
- } catch (e) {
- return false;
- }
- },
- //get方法在localstorage中获取指定JSON数据
- get: function(key) {
- if (this.has(key)) {
- return JSON.parse(localStorage.getItem(key));
- }
- },
- //has方法在localstorage中查询指定JSON数据是否存在
- has: function(key) {
- if (localStorage.getItem(key)) {
- return true;
- } else {
- return false;
- }
- },
- //del方法在localstorage中删除指定JSON数据
- del: function(key) {
- localStorage.removeItem(key);
- }
- };
- //settings对象为设置项
- var settings = {
- settingsData: {
- searchBar: true, //true:显示搜索栏;false:隐藏搜索栏
- siteBar: true, //true:显示书签栏;false:隐藏书签栏
- searchEngine: true, //true:当前标签页打开搜索结果;false:新标签页打开搜索结果
- bookMarks: true, //true:当前标签页打开书签网页;false:新标签页打开书签网页
- settingsPurify: true, //true:开启广告拦截净化;false:关闭广告拦截净化
- hideRandBg: true, //true:开启主页随机背景入口隐藏;false:关闭主页随机背景入口隐藏
- serchForcast: true, //true:开启搜索栏联想词预测;false:关闭搜索栏联想词预测
- customJsCss: false, //true:开启自定义JS/CSS;false:关闭自定义JS/CSS
- customJsCssData: {}, //用于存储自定义JS/CSS
- bookmarksFolder: false, //true:添加入口;false:不添加入口
- bookmarksUrl: "chrome://bookmarks", //用于存储浏览器书签地址
- currentWeather: false, //true:添加天气;false:不添加天气
- weatherCity: "", //实况天气城市,若为空则自动ip定位到地级市
- weatherAppId: "", //实况天气AppId,若为空则使用默认AppId
- weatherAppSecret: "" //实况天气AppSecret,若为空则使用默认AppSecret
- },
- backupData: {}, //用于备份数据
- //get方法获取settings对象settingsData属性
- get: function(key) {
- return this.settingsData[key];
- },
- //get方法获取settings对象settingsData所有属性
- getAll: function() {
- return this.settingsData;
- },
- //getBackup方法获取settings对象backupData所有属性
- getBackup: function() {
- return this.backupData;
- },
- //set方法设置settings对象settingsData属性
- set: function(key, value) {
- if (typeof value === "boolean" || /^(customJsCssData|bookmarksUrl|weather)/i.test(key)) {
- this.settingsData[key] = value;
- } else {
- console.log("value错误");
- }
- },
- //save方法用于保存设置
- save: function() {
- store.set("settingsData", this.getAll());
- },
- //initData方法初始化settings对象属性
- initData: function() {
- this.backupData = this.settingsData;
- var localData = store.get("settingsData");
- var settingsData = this.settingsData;
- if (localData) {
- this.settingsData = {
- ...settingsData,
- ...localData
- };
- } else {
- store.set("settingsData", this.settingsData);
- }
- },
- //init方法初始化搜索引擎与书签的打开方式
- init: function() {
- this.initData();
- newSettingsPageFn.init();
- searchEngine.init();
- bookMarks.init();
- serchForcast.init();
- settingsPurify.init();
- hideRandBg.init();
- customJsCss.init();
- bookmarksFolder.init();
- currentWeather.init();
- console.log("简法主页功能增强:初始化完成");
- },
- //monitor方法用于检错、监控修改结果
- monitor: function() {
- var Timer = setInterval(function() {
- searchEngine.monitor();
- bookMarks.monitor();
- serchForcast.monitor();
- settingsPurify.monitor();
- hideRandBg.monitor();
- customJsCss.monitor();
- bookmarksFolder.monitor();
- currentWeather.monitor();
- }, 500);
- console.log("简法主页功能增强:检错程序启动(定时器ID:" + Timer + ")");
- },
- //on方法用于启动整个程序
- on: function() {
- if (location.hostname === 'www.jianfast.com' && (location.pathname === "/" || location
- .pathname === "/m")) {
- console.log("简法主页功能增强:主程序启动");
- this.init();
- this.monitor();
- }
- }
- }
- //newSettingsPageFn为增强设置页
- var newSettingsPageFn = {
- optData: [{
- tittle: "显示主页搜索栏",
- value: "searchBar",
- choice: [{
- t: "开启显示",
- v: true
- }, {
- t: "关闭显示",
- v: false
- }]
- }, {
- tittle: "显示主页书签栏",
- value: "siteBar",
- choice: [{
- t: "开启显示",
- v: true
- }, {
- t: "关闭显示",
- v: false
- }]
- }, {
- tittle: "搜索结果打开方式",
- value: "searchEngine",
- choice: [{
- t: "当前标签页",
- v: true
- }, {
- t: "新标签页",
- v: false
- }]
- }, {
- tittle: "主页书签打开方式",
- value: "bookMarks",
- choice: [{
- t: "当前标签页",
- v: true
- }, {
- t: "新标签页",
- v: false
- }]
- }, {
- tittle: "搜索栏联想词预测",
- value: "serchForcast",
- choice: [{
- t: "开启预测",
- v: true
- }, {
- t: "关闭预测",
- v: false
- }]
- }, {
- tittle: "广告拦截净化",
- value: "settingsPurify",
- choice: [{
- t: "开启净化",
- v: true
- }, {
- t: "关闭净化",
- v: false
- }]
- }, {
- tittle: "隐藏随机背景入口",
- value: "hideRandBg",
- choice: [{
- t: "开启隐藏",
- v: true
- }, {
- t: "关闭隐藏",
- v: false
- }]
- }, {
- tittle: "自定义JS/CSS",
- value: "customJsCss",
- choice: [{
- t: "开启自定义",
- v: true
- }, {
- t: "关闭自定义",
- v: false
- }]
- }, {
- tittle: "浏览器书签",
- value: "bookmarksFolder",
- choice: [{
- t: "添加入口",
- v: true
- }, {
- t: "关闭功能",
- v: false
- }]
- }, {
- tittle: "添加实况天气",
- value: "currentWeather",
- choice: [{
- t: "添加天气",
- v: true
- }, {
- t: "关闭功能",
- v: false
- }]
- }, {
- tittle: "关于脚本",
- type: "note",
- noteData: [{
- l: "当前版本",
- r: `<span id='versionBtn'>version${GM_info.script.version}</span>`
- }, {
- l: "版本更新",
- r: "<span id='updateBtn'>GreasyFork</span>"
- }, {
- l: "反馈建议",
- r: "<span id='contactBtn'>点此处反馈</span>"
- }, {
- l: "导入配置",
- r: "<span id='importSetBtn'>点此处导入</span>"
- }, {
- l: "导出配置",
- r: "<span id='exportSetBtn'>点此处导出</span>"
- }, {
- l: "重置配置",
- r: "<span id='recoverSetBtn'>点此处重置</span>"
- }, {
- l: "天气接口",
- r: "<span id='weatherApiBtn'>点此处前往</span>"
- }]
- }],
- //clickFn方法为设置选项按钮的点击功能
- clickFn: function(id, key) {
- var Obj = document.getElementById(id);
- var setValue = settings.get(key);
- var optValue = Obj.value;
- if (setValue !== optValue) {
- this.selectBtn(Obj, key, optValue);
- this.needSave();
- }
- },
- //selectBtn方法用于选择按钮
- selectBtn: function(target, key, value) {
- settings.set(key, value);
- var targetPar = target.parentElement.children;
- for (let i = 0; i < targetPar.length; i++) {
- if (targetPar[i].value === value) {
- targetPar[i].style.border = "1px solid #2c7bf6";
- targetPar[i].style.color = "#2c7bf6";
- } else {
- targetPar[i].style.border = "1px solid rgba(0, 0, 0, 0.1)";
- targetPar[i].style.color = "";
- }
- }
- },
- //needSave方法用于显示保存按钮
- needSave: function() {
- saveFlag = true;
- var newSaveBox = document.getElementById("new-save-box");
- if (newSaveBox && newSaveBox.style.display === "none") {
- newSaveBox.style.display = "flex";
- }
- var tittleBox = document.getElementById("console-title-box");
- if (tittleBox && tittleBox.style.display !== "none") {
- tittleBox.style.display = "none";
- }
- },
- //createTittle方法创建一个盛放设置标题的元素对象
- createTittle: function(val) {
- var Box = document.createElement("div");
- Box.setAttribute("class", "console-bigTitle");
- Box.innerText = val;
- return Box;
- },
- //createChoiceBtn方法创建一个设置选项按钮对象
- createChoiceBtn: function(choice, id) {
- var Btn = document.createElement("div");
- var BtnID = id + "-" + choice.v;
- var key = id.slice("moreSet-Opt-".length);
- Btn.style =
- "padding: 0 10px;width: 35%;margin: 5px 10px;height: 25px;box-sizing: border-box;line-height: 23px;text-align: center;border-radius: 100px;font-size: 13px;border: 1px solid rgba(0, 0, 0, 0.1);cursor: pointer;user-select: none;transition: all .3s;";
- Btn.innerText = choice.t;
- Btn.value = choice.v;
- Btn.id = BtnID;
- Btn.onclick = function() {
- newSettingsPageFn.clickFn(BtnID, key);
- };
- if (settings.get(key) === choice.v) {
- Btn.style.border = "1px solid #2c7bf6";
- Btn.style.color = "#2c7bf6";
- }
- return Btn;
- },
- //createChoice方法创建一个设置选项按钮对象的集合对象
- createChoice: function(value, choice) {
- var Box = document.createElement("div");
- var BoxID = "moreSet-Opt-" + value;
- Box.style =
- "width:100%;display:flex;justify-content:center;flex-flow:row wrap;margin-top:15px;";
- Box.id = BoxID
- var Btn;
- if (Array.isArray(choice)) {
- for (let i = 0; i < choice.length; i++) {
- Btn = this.createChoiceBtn(choice[i], BoxID);
- Box.appendChild(Btn);
- }
- } else {
- Btn = this.createChoiceBtn(choice, BoxID);
- Box.appendChild(Btn);
- }
- return Box;
- },
- //createOpt方法创建一个完整的设置项对象
- createOpt: function(tittle, value, choice) {
- var ResObj = false;
- if (tittle && value && choice) {
- ResObj = document.createElement("div");
- var newTittle = this.createTittle(tittle);
- var newChoice = this.createChoice(value, choice);
- ResObj.appendChild(newTittle);
- ResObj.appendChild(newChoice);
- }
- return ResObj;
- },
- //createNoteText方法创建一个文字性(非选项)的提示对象
- createNoteText: function(data) {
- var textObj = document.createElement("div");
- textObj.style = "width:100%;margin:5px;";
- textObj.innerHTML = "<span>" + data.l + "</span>";
- if (data.r) {
- textObj.innerHTML += "<span> : </span><span style='color:black'>" + data.r + "</span>";
- }
- return textObj;
- },
- //createNoteData方法创建一个文字性的提示对象的集合对象
- createNoteData: function(noteData) {
- var newNoteBox = document.createElement("div");
- newNoteBox.style =
- "width: 60%;margin:20%;margin-top: 20px; text-align: center; line-height: 23px;";
- var newNoteText;
- if (Array.isArray(noteData)) {
- for (let i = 0; i < noteData.length; i++) {
- newNoteText = this.createNoteText(noteData[i]);
- newNoteBox.appendChild(newNoteText);
- }
- } else {
- newNoteText = this.createNoteText(noteData);
- newNoteBox.appendChild(newNoteText);
- }
- return newNoteBox;
- },
- //createNote方法创建一个文字性的完整的提示对象
- createNote: function(tittle, noteData) {
- var ResObj = false;
- if (tittle && noteData) {
- ResObj = document.createElement("div");
- var newTittle = this.createTittle(tittle);
- var newNote = this.createNoteData(noteData);
- ResObj.appendChild(newTittle);
- ResObj.appendChild(newNote);
- }
- return ResObj;
- },
- //createPage方法创建一个增强设置页
- createPage: function(val) {
- var settingBox = document.createElement("div");
- settingBox.id = "console-moreSet-content";
- settingBox.style =
- "width: 100%;height: 100px;flex-grow: 1;overflow: auto;box-sizing: border-box;padding: 0 25px 0 0;margin: 10px 0;display: none";
- var newOpt;
- for (let i = 0; i < val.length; i++) {
- if (val[i].type) {
- if (val[i].type === "note") {
- newOpt = this.createNote(val[i].tittle, val[i].noteData);
- settingBox.appendChild(newOpt);
- }
- } else {
- newOpt = this.createOpt(val[i].tittle, val[i].value, val[i].choice);
- settingBox.appendChild(newOpt);
- }
- }
- document.getElementById("console-box").appendChild(settingBox);
- },
- //createMenu方法在设置菜单中创建增强设置功能入口
- createMenu: function() {
- var menuBtn = document.createElement("div");
- menuBtn.setAttribute("class", "console-menu-btn");
- menuBtn.id = "moreSetBtn";
- menuBtn.innerText = "增强设置";
- menuBtn.onclick = this.on;
- document.getElementById("console-menu-main").appendChild(menuBtn);
- },
- //createSaveBtn方法创建一个保存按钮对象
- createSaveBtn: function() {
- var oldSaveBox = document.getElementById("save-box");
- var newSaveBox = document.createElement("div");
- newSaveBox.style.display = "none";
- newSaveBox.id = "new-save-box";
- var newSaveBtn = document.createElement("div");
- newSaveBtn.style =
- "font-size: 14px;display: flex;justify-content: center;align-items: center;background-color: #4486f6;color: white;height: 25px;width: 120px;border-radius: 100px;margin-right: 10px;cursor: pointer;";
- var newSaveIcon = document.createElement("img");
- newSaveIcon.style = "width: 13px;height: 13px;margin-right: 5px;";
- newSaveIcon.setAttribute("src", "/static/home/images/console/saveicon.svg");
- var newSaveTittle = document.createElement("span");
- newSaveTittle.innerText = "保存并应用";
- newSaveBtn.onclick = function() {
- if (saveFlag) {
- settings.save();
- saveFlag = false;
- console.log("保存增强设置");
- setTimeout(function() {
- var msgBox = document.getElementById("msg-box");
- msgBox.style =
- "opacity:0.8;margin-top:50px;display:inline-block;";
- msgBox.innerText = "增强设置保存成功";
- setTimeout(function() {
- location.reload();
- }, 500);
- }, 300);
- }
- document.getElementById("console-close-btn").click();
- };
- newSaveBtn.appendChild(newSaveIcon);
- newSaveBtn.appendChild(newSaveTittle);
- newSaveBox.appendChild(newSaveBtn);
- oldSaveBox.parentElement.insertBefore(newSaveBox, oldSaveBox);
- },
- //on方法是增强设置页面的启动方法
- on: function() {
- var moreSetPage = document.getElementById("console-moreSet-content");
- if (moreSetPage) {
- document.getElementsByClassName("console-title-img")[0].src =
- "/static/home/images/console/set1.svg";
- document.getElementsByClassName("console-title")[0].innerText = "增强设置";
- document.getElementById("console-menu").style.display = "none";
- moreSetPage.style.display = "block";
- } else {
- console.log("增强设置页不存在");
- }
- },
- //off方法是增强设置页面的关闭/隐藏方法
- off: function() {
- var moreSetPage = document.getElementById("console-moreSet-content");
- var newSaveBox = document.getElementById("new-save-box");
- if (moreSetPage && moreSetPage.style.display !== "none") {
- moreSetPage.style.display = "none";
- }
- if (newSaveBox.style.display !== "none") {
- newSaveBox.style.display = "none";
- }
- },
- //addExtEvent方法用于增加一些额外的事件
- addExtEvent: function() {
- var target;
- //当前版本
- target = document.getElementById("versionBtn");
- if (target) {
- target.onclick = function() {
- var msg =
- `脚本名称:${GM_info.script.name}\n当前版本:${GM_info.script.version}\n本作作者:${GM_info.script.author}\n检查版本更新、使用帮助等功能,请点击"关于脚本"下方的"GreasyFork"文字`;
- console.log(msg);
- alert(msg);
- }
- target.onmouseover = function() {
- document.getElementById("versionBtn").style.color = "";
- }
- target.onmouseleave = function() {
- document.getElementById("versionBtn").style.color = "grey";
- }
- target.style.cursor = "pointer";
- target.style.color = "grey";
- }
- //版本更新
- target = document.getElementById("updateBtn");
- if (target) {
- target.onclick = function() {
- location.href = "https://gf.qytechs.cn/zh-CN/scripts/431279";
- }
- target.onmouseover = function() {
- document.getElementById("updateBtn").style.color = "";
- }
- target.onmouseleave = function() {
- document.getElementById("updateBtn").style.color = "grey";
- }
- target.style.cursor = "pointer";
- target.style.color = "grey";
- }
- //反馈建议
- target = document.getElementById("contactBtn");
- if (target) {
- target.onclick = function() {
- location.href = "https://gf.qytechs.cn/zh-CN/scripts/431279/feedback";
- }
- target.onmouseover = function() {
- document.getElementById("contactBtn").style.color = "";
- }
- target.onmouseleave = function() {
- document.getElementById("contactBtn").style.color = "grey";
- }
- target.style.cursor = "pointer";
- target.style.color = "grey";
- }
- //导入配置
- target = document.getElementById("importSetBtn");
- if (target) {
- target.onclick = function() {
- var data = prompt("在这粘贴需要导入的配置数据:");
- data = data.trim();
- try {
- if (data !== null && data !== "") {
- data = JSON.parse(data);
- store.set("settingsData", data.settingsData);
- alert("导入配置成功");
- location.reload();
- }
- } catch (e) {
- alert("配置数据错误,导入配置失败");
- }
- }
- target.onmouseover = function() {
- document.getElementById("importSetBtn").style.color = "";
- }
- target.onmouseleave = function() {
- document.getElementById("importSetBtn").style.color = "grey";
- }
- target.style.cursor = "pointer";
- target.style.color = "grey";
- }
- //导出配置
- target = document.getElementById("exportSetBtn");
- if (target) {
- target.onclick = function() {
- var exportBox = document.createElement("input");
- exportBox.value = "{\"settingsData\":" + JSON.stringify(settings.getAll()) + "}";
- document.body.appendChild(exportBox);
- exportBox.select();
- document.execCommand('copy');
- exportBox.remove();
- alert("配置数据已成功导出到剪贴板");
- }
- target.onmouseover = function() {
- document.getElementById("exportSetBtn").style.color = "";
- }
- target.onmouseleave = function() {
- document.getElementById("exportSetBtn").style.color = "grey";
- }
- target.style.cursor = "pointer";
- target.style.color = "grey";
- }
- //重置配置
- target = document.getElementById("recoverSetBtn");
- if (target) {
- target.onclick = function() {
- var msg = "即将重置配置数据\n点击确认开始重置";
- if (confirm(msg)) {
- var data = settings.getBackup();
- if (JSON.stringify(data).trim() !== "{}") {
- store.set("settingsData", data);
- alert("配置数据重置成功");
- location.reload();
- } else {
- msg = "重置配置功能错误,请联系脚本制作者\n点击确认前往反馈";
- if (confirm(msg)) {
- var btn = document.getElementById("contactBtn");
- if (btn) {
- btn.click();
- }
- }
- }
- }
- }
- target.onmouseover = function() {
- document.getElementById("recoverSetBtn").style.color = "";
- }
- target.onmouseleave = function() {
- document.getElementById("recoverSetBtn").style.color = "grey";
- }
- target.style.cursor = "pointer";
- target.style.color = "grey";
- }
- //天气接口
- target = document.getElementById("weatherApiBtn");
- if (target) {
- target.onclick = function() {
- alert("此API来源于网络,非本脚本开发者所有\n如有天气API方面的问题,请联系API开发者");
- open("https://yiketianqi.com/");
- }
- target.onmouseover = function() {
- this.style.color = "";
- }
- target.onmouseleave = function() {
- this.style.color = "grey";
- }
- target.style.cursor = "pointer";
- target.style.color = "grey";
- }
- //自定义JS/CSS
- target = document.getElementById("moreSet-Opt-customJsCss-true");
- if (target) {
- target.addEventListener("click", function() {
- customJsCss.clickFn();
- });
- }
- //浏览器书签
- target = document.getElementById("moreSet-Opt-bookmarksFolder-true");
- if (target) {
- target.addEventListener("click", function() {
- bookmarksFolder.clickFn();
- });
- }
- //实况天气
- target = document.getElementById("moreSet-Opt-currentWeather-true");
- if (target) {
- target.addEventListener("click", function() {
- currentWeather.clickFn();
- });
- }
- },
- //initPC方法是针对PC模式的增强设置初始化方法,是增强设置的启动方法
- initPC: function() {
- var consoleBox = document.getElementById("console-box");
- if (consoleBox) {
- var closeBtn = document.getElementById("console-close-btn");
- if (closeBtn) {
- closeBtn.addEventListener("click", newSettingsPageFn.off);
- }
- this.createMenu();
- this.createSaveBtn();
- this.createPage(this.optData);
- this.addExtEvent();
- }
- },
- //initMobile方法是针对Mobile模式的增强设置初始化方法,是增强设置的启动方法
- initMobile: function() {
- var menuWrap = document.getElementById("menu-wrap");
- if (menuWrap) {
- var menuObj = menuWrap.children[1];
- if (menuObj && menuObj.tagName === "UL") {
- var newOpt = document.createElement("li");
- newOpt.style = "cursor:pointer;"
- newOpt.innerHTML = "<img src='/static/home/images/console/set1.svg'/><span>增强设置</span>";
- newOpt.onclick = function() {
- var res = confirm("增强设置请前往电脑版操作,点击确认前往电脑版");
- if (res) {
- location.href = "https://www.jianfast.com/?pc=1";
- }
- }
- menuObj.appendChild(newOpt);
- }
- var menuNotice = document.getElementById("menu-notice");
- var newNotice = "<div>" + menuNotice.children[1].innerText +
- "</div><div>对增强设置进行修改请前往电脑版网页操作</div><div>增强设置-搜索结果打开方式仅对电脑版生效</div>";
- menuNotice.children[1].innerHTML = newNotice;
- }
- },
- //init方法调用initPC方法与initMobile方法初始化增强设置,是对外统一调用的初始化方法
- init: function() {
- this.initPC();
- this.initMobile();
- }
- };
- //searchEngine对象为搜索引擎项
- var searchEngine = {
- //change方法用于改变搜索按钮类型,从而便于覆盖搜索打开方式
- change: function() {
- var searchBtn = document.getElementById("search-btn");
- if (searchBtn) {
- searchBtn.type = "text";
- }
- },
- //click方法用于覆盖原搜索按钮点击方法
- click: function() {
- if (location.href.search("jianfast.com/m") === -1) {
- var searchBar = document.getElementById("search");
- var url = searchBar.getAttribute("data-engine-start");
- var val = searchBar.value;
- if (settings.get("searchEngine")) {
- location.href = url + val;
- } else {
- open(url + val);
- }
- }
- },
- //enter方法用于覆盖原回车搜索方法
- enter: function(event) {
- if (event.keyCode === 13) {
- searchEngine.click();
- }
- },
- //display方法用于显示或隐藏搜索栏
- display: function() {
- var searchBar = document.getElementById("search-wrap");
- if (searchBar) {
- if (settings.get("searchBar") && searchBar.style.display === "none") {
- searchBar.style.display = "flex";
- } else if (!settings.get("searchBar") && searchBar.style.display !== "none") {
- searchBar.style.display = "none";
- }
- }
- },
- //init方法用于初始化搜索引擎,覆盖新方法
- init: function() {
- searchEngine.change();
- this.display();
- var searchBtn = document.getElementById("search-btn");
- if (searchBtn) {
- searchBtn.onclick = this.click;
- }
- var searchBar = document.getElementById("search");
- if (searchBar) {
- searchBar.onkeydown = this.enter;
- }
- },
- //monitor方法用于检错、监控修改结果,若出错则调用init方法重新覆盖
- monitor: function() {
- this.display();
- var searchForm = document.getElementById("search-form");
- var searchBar = document.getElementById("search");
- var searchBtn = document.getElementById("search-btn");
- if ((searchBar && searchBar.onkeydown === null) || (searchBtn && searchBtn.type !== "text") || (
- searchBtn && searchBtn.onclick === null)) {
- this.init();
- }
- }
- }
- //bookMarks对象为主页书签项
- var bookMarks = {
- //change方法用于改变书签打开方式
- change: function(Obj) {
- if (Obj.tagName === "A") {
- if (settings.get("bookMarks") && Obj.target !== "") {
- Obj.target = "";
- } else if (!settings.get("bookMarks") && Obj.target !== "_blank") {
- Obj.target = "_blank";
- }
- }
- },
- //display方法用于显示或隐藏书签栏
- display: function() {
- var siteBar = document.getElementById("site-wrap");
- if (siteBar) {
- if (settings.get("siteBar") && siteBar.style.display === "none") {
- siteBar.style.display = "flex";
- } else if (!settings.get("siteBar") && siteBar.style.display !== "none") {
- siteBar.style.display = "none";
- }
- }
- },
- //init方法用于遍历书签并调用change方法改变打开方式
- init: function() {
- this.display();
- var siteBox, aBox, aBoxLen;
- var idArray = ["site-box", "site-wrap"];
- for (let i = 0; i < idArray.length; i++) {
- siteBox = document.getElementById(idArray[i])
- if (siteBox) {
- break;
- }
- }
- if (siteBox && siteBox.childElementCount > 0) {
- for (let i = 0; i < siteBox.childElementCount; i++) {
- this.change(siteBox.children[i]);
- }
- }
- },
- //monitor方法用于检错程序
- monitor: function() {
- this.init();
- }
- }
- //serchForcast搜索栏联想词预测相关功能
- var serchForcast = {
- display: function() {
- var keywordBox = document.getElementById("search-keyword-box");
- if (keywordBox && !settings.get("serchForcast")) {
- keywordBox.remove();
- }
- },
- //click方法用于覆盖原联想词点击方法
- click: function(target) {
- var searchBar = document.getElementById("search");
- searchBar.value = target.innerText;
- searchEngine.click();
- },
- //mouseOver方法用于覆盖原联想词鼠标事件(置于上方)方法
- mouseOver: function(target) {
- var targetPare = target.parentElement;
- if (targetPare && targetPare.childElementCount > 0) {
- for (let i = 0; i < targetPare.childElementCount; i++) {
- this.mouseLeave(targetPare.children[i]);
- }
- }
- target.style = "background-color: rgb(241, 241, 241);";
- },
- //mouseLeave方法用于覆盖原联想词鼠标事件(离开)方法
- mouseLeave: function(target) {
- target.style = "background-color: rgba(255, 255, 255, 0.3);";
- },
- //change方法用于改变搜索栏联想词相关功能
- change: function(keywordBox) {
- if (keywordBox) {
- keywordBox.innerHTML = keywordBox.innerHTML; //整体覆盖删除原方法
- var keyword = keywordBox.children;
- if (keyword.length > 0) {
- for (let i = 0; i < keyword.length; i++) { //增加新方法
- keyword[i].onmouseover = function() {
- serchForcast.mouseOver(keyword[i]);
- };
- keyword[i].onmouseleave = function() {
- serchForcast.mouseLeave(keyword[i]);
- };
- keyword[i].onclick = function() {
- serchForcast.click(keyword[i]);
- };
- }
- }
- }
- },
- //close方法用于关闭设置时若未保存重置按键值
- close: function() {
- var localData = store.get("settingsData");
- var localValue = localData.serchForcast;
- var settingValue = settings.get("serchForcast");
- if (typeof localValue === "boolean" && typeof settingValue === "boolean" && localValue !==
- settingValue) {
- var targetBtn = document.getElementById("moreSet-Opt-serchForcast-" + localValue);
- if (targetBtn) {
- targetBtn.click();
- }
- targetBtn = document.getElementById("new-save-box");
- if (targetBtn && targetBtn.style.display !== "none") {
- targetBtn.style.display = "none";
- }
- }
- },
- //init方法用于初始化相关功能
- init: function() {
- addLoadEvent(this.display);
- this.change();
- var closeBtn = document.getElementById("console-close-btn");
- if (closeBtn) {
- closeBtn.addEventListener("click", serchForcast.close);
- }
- },
- //monitor方法用于检错程序
- monitor: function() {
- var keywordBox = document.getElementById("search-keyword-box");
- if (keywordBox && keywordBox.childElementCount > 0) {
- var keywordInitFlag = false;
- var keyword = keywordBox.children;
- for (let i = 0; i < keyword.length; i++) {
- if (keyword[i].onmouseover === null || keyword[i].onmouseleave === null || keyword[i]
- .onclick === null) {
- keywordInitFlag = true;
- break;
- }
- }
- if (keywordInitFlag) {
- this.change(keywordBox);
- }
- }
- }
- };
- //settingsPurify为广告拦截净化功能
- var settingsPurify = {
- //init方法用于初始化净化广告
- init: function() {
- var adObj = document.getElementsByClassName("console-bottom-ad");
- if (adObj && adObj.length > 0) {
- for (let i = 0; i < adObj.length; i++) {
- if (settings.get("settingsPurify") && adObj[i].style.display !== "none") {
- adObj[i].style.display = "none";
- } else if (!settings.get("settingsPurify") && adObj[i].style.display === "none") {
- adObj[i].style.display = "";
- }
- }
- }
- adObj = document.getElementById("hongbao-btn");
- if (adObj) {
- if (settings.get("settingsPurify") && adObj.style.display !== "none") {
- adObj.style.display = "none";
- } else if (!settings.get("settingsPurify") && adObj.style.display === "none") {
- adObj.style.display = "";
- }
- }
- var bottomBtnBox = document.getElementById("console-bottom-btn-box");
- if (bottomBtnBox.childElementCount > 0) {
- bottomBtnBox = bottomBtnBox.children;
- var bottomBtn;
- for (let i = 0; i < bottomBtnBox.length; i++) {
- bottomBtn = bottomBtnBox[i];
- if (bottomBtn) {
- if (settings.get("settingsPurify")) {
- if (bottomBtn.innerText === "设为主页") {
- bottomBtn.innerText = "移动版";
- bottomBtn.href = "/m";
- bottomBtn.target = "";
- } else if (bottomBtn.innerText === "关于") {
- bottomBtn.innerText = "问题反馈";
- bottomBtn.href = "/contact";
- bottomBtn.target = "_blank";
- }
- } else if (!settings.get("settingsPurify")) {
- if (bottomBtn.innerText === "设为主页") {
- bottomBtn.innerText = "设为主页";
- bottomBtn.href = "/zhuye";
- bottomBtn.target = "_blank";
- } else if (bottomBtn.innerText === "关于") {
- bottomBtn.innerText = "关于";
- bottomBtn.href = "/about";
- bottomBtn.target = "_blank";
- }
- }
- }
- }
- }
- },
- //monitor方法用于检错程序
- monitor: function() {
- this.init();
- }
- }
- //hideRandBg为主页随机背景入口隐藏功能
- var hideRandBg = {
- //init方法用于初始化入口隐藏
- init: function() {
- var randBgBtn = document.getElementById("rand-bg-btn");
- if (randBgBtn) {
- if (settings.get("hideRandBg") && randBgBtn.style.display !== "none") {
- randBgBtn.style.display = "none";
- } else if (!settings.get("hideRandBg") && randBgBtn.style.display === "none") {
- randBgBtn.style.display = "";
- }
- }
- },
- //monitor方法用于检错程序
- monitor: function() {
- this.init();
- }
- }
- //自定义JS/CSS
- var customJsCss = {
- getData: function(type, originData, extraMsg) {
- var data, res;
- var msg = "请输入自定义" + type + "\n点击确定,保存自定义" + type + "; 点击取消,删除自定义" + type;
- if (extraMsg) {
- msg = msg + "\n\n" + extraMsg;
- }
- if (!originData) {
- originData = "";
- }
- data = prompt(msg, originData);
- if (typeof data === "string") {
- data = data.trim();
- }
- if (data) {
- res = data;
- } else {
- res = "";
- }
- console.log("自定义" + type + ":" + res);
- return res;
- },
- clickFn: function() {
- var data = settings.get("customJsCssData");
- data.js = this.getData("JS", data.js, "注意:extraCustomJS()为自定义JS的入口方法,请避免将方法名命名为extraCustomJS");
- data.css = this.getData("CSS", data.css);
- settings.set("customJsCssData", data);
- if (!data.js && !data.css) {
- alert("自定义JS/CSS已删除,将自动选择关闭自定义");
- var falseBtn = document.getElementById("moreSet-Opt-customJsCss-false");
- if (falseBtn) {
- falseBtn.click();
- }
- }
- newSettingsPageFn.needSave();
- },
- on: function() {
- var data = settings.get("customJsCssData");
- var eleBox = document.createElement("div");
- eleBox.id = "customJsCssBox";
- if (data.js) {
- var JSele = document.createElement("script");
- JSele.id = "customJS";
- JSele.innerHTML = "function extraCustomJS(){\r\n\ttry{\r\n\t" + data.js +
- "\r\n\t}catch(e){\r\n\tvar msg='自定义JS错误';\r\n\tconsole.log(msg);\r\n\talert(msg);\r\n\t}\r\n\t}\r\n\textraCustomJS();";
- eleBox.appendChild(JSele);
- }
- if (data.js) {
- var CSSele = document.createElement("style");
- CSSele.id = "customCSS";
- CSSele.innerHTML = data.css;
- eleBox.appendChild(CSSele);
- }
- var bodyFirstEle = document.body.children[0];
- document.body.insertBefore(eleBox, bodyFirstEle);
- },
- off: function() {
- var eleBox = document.getElementById("customJsCssBox");
- if (eleBox) {
- eleBox.remove();
- }
- },
- init: function() {
- if (settings.get("customJsCss")) {
- this.on();
- }
- },
- monitor: function() {
- var eleBox = document.getElementById("customJsCssBox");
- if (settings.get("customJsCss") && !eleBox) {
- this.on();
- } else if (!settings.get("customJsCss") && eleBox) {
- this.off();
- }
- }
- };
- //bookmarksFolder浏览器书签
- var bookmarksFolder = {
- //on方法用于启动
- on: function() {
- let bookmarksContainer = document.getElementById("site-box");
- if (bookmarksContainer && bookmarksContainer.firstElementChild) {
- let newSite = bookmarksContainer.querySelector("#open_bookmarks_folder_btn");
- if (newSite) {
- return false;
- }
- newSite = bookmarksContainer.firstElementChild.cloneNode(true);
- newSite.id = "open_bookmarks_folder_btn";
- bookmarksContainer.appendChild(newSite);
- newSite.href = "javascript:void(0);";
- console.log(bookmarksContainer.firstChild)
- newSite.getElementsByTagName("img")[0].src = "static/home/images/defaultsicon/9.png";
- newSite.getElementsByClassName("site-title")[0].innerText = "浏览器书签";
- newSite.onclick = function() {
- let url = settings.get("bookmarksUrl");
- url = url ? url : "chrome://bookmarks";
- GM_openInTab(url, false);
- }
- }
- },
- //off方法用于关闭
- off: function() {
- let target = document.getElementById("open_bookmarks_folder_btn");
- if (target) {
- target.remove();
- }
- },
- //clickFn方法为设置点击功能
- clickFn: function() {
- let url = settings.get("bookmarksUrl");
- url = url ? url : "chrome://bookmarks";
- url = prompt("请输入浏览器书签地址", url);
- if (url && typeof url === "string") {
- settings.set("bookmarksUrl", url);
- newSettingsPageFn.needSave();
- }
- },
- //init方法用于初始化添加一个书签按钮
- init: function() {
- if (settings.get("bookmarksFolder")) {
- this.on();
- }
- },
- //monitor方法用于检错程序
- monitor: function() {
- this.init();
- }
- }
- //currentWeather实况天气
- var currentWeather = {
- num: 0,
- ajax: function() {
- var id = settings.get("weatherAppId"),
- secret = settings.get("weatherAppSecret"),
- city = settings.get("weatherCity");
- id = id ? id : "23035354", secret = secret ? secret : "8YvlPNrz", city = city ?
- `&city${(/^\d+$/.test(city)?"id":"")}=${city}` : ""
- var url =
- `https://yiketianqi.com/api?unescape=1&version=v1&appid=${id}&appsecret=${secret}${city}`;
- console.log(url);
- $.ajax({
- url: url,
- type: "get",
- dataType: "json",
- success: function(res) {
- var data = res.data[0];
- var weather =
- `${res.city}-${data.wea}-${data.air_level.length>1?data.air_level:"空气"+data.air_level}-气温${data.tem}(${data.tem1}/${data.tem2})`
- .replaceAll("℃", "°C");
- var time = new Date().toLocaleString();
- $("#search").attr("placeholder", weather);
- localStorage.setItem("currentWeatherCache", JSON.stringify({
- "t": time,
- "w": weather
- }))
- }
- })
- },
- //on方法用于启动
- on: function() {
- if (this.num === 0) {
- var data = localStorage.getItem("currentWeatherCache");
- if (data) {
- data = JSON.parse(data);
- var pT = new Date(data.t),
- cT = new Date();
- var gap = cT.getTime() - pT.getTime();
- if (gap > 3 * 3600 * 1000 || cT.toLocaleDateString() !== pT.toLocaleDateString()) {
- this.ajax();
- } else if ($("#search").attr("placeholder") !== data.w) {
- $("#search").attr("placeholder", data.w);
- }
- } else {
- this.ajax();
- }
- }
- this.num = (this.num < 1200) ? (this.num + 1) : 0; //10min检查一次cache
- },
- //off方法用于关闭
- off: function() {
- $("#search").attr("placeholder", "");
- },
- // userInput方法为用户输入保存相关信息
- userInput: function(data, key, msg) {
- data = prompt(msg, data);
- if (data && typeof data === "string") {
- settings.set(key, data);
- newSettingsPageFn.needSave();
- }
- },
- //clickFn方法为设置点击功能
- clickFn: function() {
- let city = settings.get("weatherCity"),
- id = settings.get("weatherAppId"),
- secret = settings.get("weatherAppSecret"),
- msg;
- city = city ? city : "", id = id ? id : "", secret = secret ? secret : "";
- msg = "请输入实况天气城市名(可精确到区县一级,例如:浦东新区、崇明、朝阳)或城市id。若为空,则自动使用ip定位到地级市一级\n城市id请点击“关于脚本-天气接口”获取";
- this.userInput(city, "weatherCity", msg);
- msg = "请输入实况天气API的AppId。若为空,自动使用公共AppId\n个人AppId请点击“关于脚本-天气接口”获取";
- this.userInput(id, "weatherAppId", msg);
- msg = "请输入实况天气API的AppSecret。若为空,自动使用公共AppSecret\n个人AppSecret请点击“关于脚本-天气接口”获取";
- this.userInput(id, "weatherAppSecret", msg);
- localStorage.setItem("currentWeatherCache", "");
- this.num = 0;
- },
- //init方法用于初始化添加一个书签按钮
- init: function() {
- if (settings.get("currentWeather")) {
- this.on();
- }
- },
- //monitor方法用于检错程序
- monitor: function() {
- this.init();
- }
- }
- //全局变量配置
- var saveFlag = false; //saveFlag用于判断是否需要保存增强设置
- //启动主程序
- settings.on();
- })();