百度搜索 - 优化 - v4

1、屏蔽百度推广 2、关闭百度广告联盟信息收集 3、绑定快捷键 4、布局调整 5、居中单列(可选) 6、居中双列(可选)

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         百度搜索 - 优化 - v4
// @namespace    http://tampermonkey.net/
// @description  1、屏蔽百度推广 2、关闭百度广告联盟信息收集 3、绑定快捷键 4、布局调整 5、居中单列(可选) 6、居中双列(可选)
// @version      4.5.7
// @author       浮生未歇
// @run-at       document-start

// @include      http://www.baidu.com/
// @include      http://www.baidu.com/s?*
// @incluce      http://www.baidu.com/#*
// @include      http://www.baidu.com/baidu?*
// @include      https://www.baidu.com/
// @include      https://www.baidu.com/s?*
// @incluce      https://www.baidu.com/#*
// @include      https://www.baidu.com/baidu?*
// @exclude      https://www.baidu.com/home*
// @exclude      https://www.baidu.com/sf*
// @exclude      https://www.baidu.com/search*
// @exclude      https://www.baidu.com/link*
// @exclude      https://www.baidu.com/s*tn=news*
// @resource     baiduIndexStyle   https://fastly.jsdelivr.net/gh/sinlin/[email protected]/v1.1.5/indexStyle.css
// @resource     baiduCommonStyle  https://fastly.jsdelivr.net/gh/sinlin/[email protected]/v1.1.5/commonStyle.css
// @resource     baiduMenu         https://fastly.jsdelivr.net/gh/sinlin/[email protected]/v1.1.5/menu.css
// @resource     baiduOne          https://fastly.jsdelivr.net/gh/sinlin/[email protected]/v1.1.5/one.css
// @resource     baiduTwo          https://fastly.jsdelivr.net/gh/sinlin/[email protected]/v1.1.5/two.css
// @resource     baiduThree        https://fastly.jsdelivr.net/gh/sinlin/[email protected]/v1.1.5/three.css
// @connect      *
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @grant        GM_getResourceURL
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_xmlhttpRequest
// ==/UserScript==



//backup
//baiduIndexStyle   https://cdn.jsdelivr.net/gh/sinlin/[email protected]/2018-10-30/indexStyle.css
//baiduCommonStyle  https://cdn.jsdelivr.net/gh/sinlin/[email protected]/2018-10-30/commonStyle.css
//baiduMenu         https://cdn.jsdelivr.net/gh/sinlin/[email protected]/2018-10-30/menu.css
//baiduOne          https://cdn.jsdelivr.net/gh/sinlin/[email protected]/2018-10-30/one.css
//baiduTwo          https://cdn.jsdelivr.net/gh/sinlin/[email protected]/2018-10-30/two.css
//baiduThree        https://cdn.jsdelivr.net/gh/sinlin/[email protected]/2018-10-30/three.css

//baiduIndexStyle   https://sshin.gitee.io/baidu-style/v1.1.4/indexStyle.css
//baiduCommonStyle  https://sshin.gitee.io/baidu-style/v1.1.4/commonStyle.css
//baiduMenu         https://sshin.gitee.io/baidu-style/v1.1.4/menu.css
//baiduOne          https://sshin.gitee.io/baidu-style/v1.1.4/one.css
//baiduTwo          https://sshin.gitee.io/baidu-style/v1.1.4/two.css
//baiduThree        https://sshin.gitee.io/baidu-style/v1.1.4/three.css


// @resource     baiduIndexStyle   https://www.wulihub.com.cn/gc/JM0LaB/v1.1.4/indexStyle.css
// @resource     baiduCommonStyle  https://www.wulihub.com.cn/gc/JM0LaB/v1.1.4/commonStyle.css
// @resource     baiduMenu         https://www.wulihub.com.cn/gc/JM0LaB/v1.1.4/menu.css
// @resource     baiduOne          https://www.wulihub.com.cn/gc/JM0LaB/v1.1.4/one.css
// @resource     baiduTwo          https://www.wulihub.com.cn/gc/JM0LaB/v1.1.4/two.css
// @resource     baiduThree        https://www.wulihub.com.cn/gc/JM0LaB/v1.1.4/three.css
(()=>{
	//http 跳转 https
	let baiduRUL = location.href;
	let url = new URL(baiduRUL);
	if (url.protocol === "http:"){
		location.href = baiduRUL.replace("http:", "https:");
	}
})();

(() => {
	//初始化配置
	const Configs = {
		//是否调试
		IS_DEBUG: false,
		//壁纸地址
		BACKGROUND_URL: "https://ss2.bdstatic.com/lfoZeXSm1A5BphGlnYG/skin/37.jpg",
		//自定义按钮 ID
		CUSTOM_BUTTON_ID: "CustomMenu",
		//菜单功能页 ID
		MENU_ITEMS_ID: "menulist",
		//菜单保存按钮 ID
		MENU_SAVA_ID: "menusava",
		//自定义背景
		CUSTOM_BG: [{
			name: "CUSTOM_BG_URL",
			value: ""
		}],
		//功能配置
		OPTIONS: [
			//页面布局:1:普通页面,2:单列居中,3:双列居中,4:三列居中
			{
				name: "SELECT_PAGE",
				value: 1
			},
			//重定向
			{
				name: "SWITCH_IS_REDIRECT",
				value: false
			},
			//加载下一页
			{
				name: "SWITCH_IS_LOADPAGE",
				value: false
			},
			//固定侧边栏
			{
				name: "SWITCH_IS_FIXEDSILDER",
				value: false
			},
			//加载背景
			{
				name: "SWITCH_IS_BACKGOUND",
				value: false
			},
			//百家号
			{
				name: "SWITCH_IS_BAIJIAHAO",
				value: false
			}
		],
		//百度样式
		BAIDU_STYLES: [{
			//百度首页
			INDEX: GM_getResourceText("baiduIndexStyle"),
			//普通页
			COMMON: GM_getResourceText("baiduCommonStyle"),
			//菜单
			MENU: GM_getResourceText("baiduMenu"),
			//单页
			ONE: GM_getResourceText("baiduOne"),
			//双页
			TWO: GM_getResourceText("baiduTwo"),
			//三页
			THREE: GM_getResourceText("baiduThree")
		}],
		//过滤功能 ,不能设置 G(已被 Google搜索 占用)
		FILTERS: [{
				name: "B",
				value: "-baijiahao"
			},
			{
				name: "T",
				value: "site:tieba.baidu.com"
			},
			{
				name: "J",
				value: "site:juejin.im"
			},
			{
				name: "S",
				value: "site:segmentfault.com"
			},
			{
				name: "V",
				value: "site:v2ex.com"
			},
			{
				name: "Z",
				value: "site:zhihu.com"
			}
		]
	};
	//打包
	const BaiduConfig = {
		window,
		document,
		location,
		Configs
	};
	//Baidu
	const Baidu = (({
		window,
		document,
		location,
		Configs
	}, undefined) => {
		//创建空对象
		const Baidu = Object.create(null);
		/**
		 * 实现 ready 功能, 文档完成后即执行
		 * 举例 : Baidu.ready = function(){}
		 */
		Reflect.defineProperty(Baidu, "ready", {
			set: fn => {
				if (document.readyState === "complete") {
					fn();
				} else if (!!document.addEventListener) {
					document.addEventListener("DOMContentLoaded", () => {
						fn();
					}, true);
				} else {
					throw new Error("Baidu.ready can't use");
				}
			}
		});
		/**
		 * 延时执行
		 * count 1 = 16.7ms
		 */
		Baidu.delayRun = (callback, count = 0) => {
			if (count === 0) {
				window.requestAnimationFrame(() => {
					return callback();
				});
			} else {
				window.requestAnimationFrame(() => {
					Baidu.delayRun(callback, --count);
				});
			}
		};
		/**
		 * GM数据类
		 * @class GM
		 */
		let GM = class {
			getValue(selection) {
				try {
					return GM_getValue(selection.name, selection.value);
				} catch (msg) {
					console.error(msg);
				}
			}
			setValue(name, value) {
				try {
					GM_setValue(name, value);
				} catch (msg) {
					console.error(msg);
				}
			}
			addStyle(style) {
				try {
					GM_addStyle(style);
				} catch (msg) {
					console.error(msg);
				}
			}
			xmlhttpRequest(object) {
				try {
					GM_xmlhttpRequest(object);
				} catch (msg) {
					console.error(msg);
				}
			}
		};
		/**
		 * 助手类
		 * 用于与底层交互
		 */
		class Base extends GM {
			constructor() {
				super();
				this.Configs = Configs;
				this.PAGE_LAYOUT = Configs.OPTIONS[0];
				this.USE_REDIRECT = Configs.OPTIONS[1];
				this.USE_AUTO_NEXT_PAGE = Configs.OPTIONS[2];
				this.USE_FIXED_SILDER = Configs.OPTIONS[3];
				this.USE_BACKGROUND = Configs.OPTIONS[4];
				this.USE_HIDE_BAIJIAHAO = Configs.OPTIONS[5];
				this.CURRENT_BACKGROUND_URL = Configs.BACKGROUND_URL;
			}
			getCustomBgName() {
				return Configs.CUSTOM_BG[0]["name"];
			}
			getCustonBgURL() {
				return super.getValue(Configs.CUSTOM_BG[0]) || "";
			}
			getCustomButtonIdName() {
				return Configs.CUSTOM_BUTTON_ID;
			}
			getMenuItemsIdName() {
				return Configs.MENU_ITEMS_ID;
			}
			getMenuSaveIdname() {
				return Configs.MENU_SAVA_ID;
			}
			getCurrentBackgroundURL() {
				return this.CURRENT_BACKGROUND_URL || "";
			}
			getCurrentPageLayoutType() {
				return Number(super.getValue(this.PAGE_LAYOUT));
			}
			getPageLayoutName() {
				return this.PAGE_LAYOUT["name"];
			}
			getUseRedirectName() {
				return this.USE_REDIRECT["name"];
			}
			getUseAuoLoadNextPageName() {
				return this.USE_AUTO_NEXT_PAGE["name"];
			}
			getUseFixedSilderName() {
				return this.USE_FIXED_SILDER["name"];
			}
			getUseBackgroundName() {
				return this.USE_BACKGROUND["name"];
			}
			getUseHideBaiJiaHaoName() {
				return this.USE_HIDE_BAIJIAHAO["name"];
			}
			isUseRedirect() {
				return !!super.getValue(this.USE_REDIRECT);
			}
			isUseAuoLoadNextPage() {
				return !!super.getValue(this.USE_AUTO_NEXT_PAGE);
			}
			isUseFixedSilder() {
				return !!super.getValue(this.USE_FIXED_SILDER);
			}
			isUseBackground() {
				return !!super.getValue(this.USE_BACKGROUND);
			}
			isUseHideBaiJiaHao() {
				return !!super.getValue(this.USE_HIDE_BAIJIAHAO);
			}
			getStyleContentForCommon() {
				return Configs.BAIDU_STYLES[0]["COMMON"] || "";
			}
			getStyleContentForIndex() {
				return Configs.BAIDU_STYLES[0]["INDEX"] || "";
			}
			getStyleContentForMenu() {
				return Configs.BAIDU_STYLES[0]["MENU"] || "";
			}
			getStyleContentForOne() {
				return Configs.BAIDU_STYLES[0]["ONE"] || "";
			}
			getStyleContentForTwo() {
				return Configs.BAIDU_STYLES[0]["TWO"] || "";
			}
			getStyleContentForThree() {
				return Configs.BAIDU_STYLES[0]["THREE"] || "";
			}
			removeElementForID(idName = "") {
				let element = document.getElementById(idName);
				if (!!element) {
					element.parentNode.removeChild(element);
				}
			}
		}
		/**
		 * 缓存类
		 * 用于对数据的缓存
		 * @class Cache
		 *
		 */
		class Cache extends Base {
			constructor() {
				super();
				this.cache = "";
			}
			/**
			 * 删除缓存
			 */
			delCache() {
				this.cache = "";
			}
			/**
			 * 添加缓存
			 * @param Content {string} 缓存内容
			 */
			addCache(Content) {
				this.cache += Content;
			}
			/**
			 * 获取缓存内容
			 */
			getCache() {
				return this.cache;
			}
		}
		/**
		 * 样式
		 * @class Style
		 * @extends Cache
		 */
		class Style extends Cache {
			constructor() {
				super();
			}
			/**
			 * 删除样式缓存
			 */
			deleteStyleCache() {
				super.delCache();
			}
			/**
			 * 获取样式缓存内容
			 */
			getStyleCache() {
				return super.getCache();
			}
			/**
			 * 添加样式到缓存
			 * @param styleContent
			 */
			addStyleCache(styleContent) {
				super.addCache(styleContent);
			}
			/**
			 * 向网页导入样式
			 * @method importStyle
			 *
			 */
			importStyle() {
				let styleContnet = this.getStyleCache();
				super.addStyle(styleContnet);
			}
			/**
			 * 将样式加入缓存
			 * @param {stirng} styleContent 样式内容
			 * @return {Style} this 该实例
			 */
			add(styleContent) {
				this.addStyleCache(styleContent);
				return this;
			}
			/**
			 * 结束
			 * 开始将缓存样式导入,并清空缓存
			 */
			end() {
				this.importStyle();
				this.deleteStyleCache();
			}
		}
		/**
		 * 函数执行器 - 组合执行
		 */
		class Commond {
			constructor() {
				this.commondList = [];
			}
			/**
			 * 添加数组缓存中
			 * @param {object} command 对象实例
			 */
			add(command) {
				this.commondList.push(command);
			}
			/**
			 * 执行数值缓存中的实例
			 */
			execute() {
				for (let i = 0, command;
					(command = this.commondList[i++]);) {
					command.execute();
				}
			}
		}
		/**
		 * 检测功能 - 避免代码多次执行
		 * @class AvoidMulExecute
		 */
		class AvoidMulExecute {
			constructor() {
				//标志名称
				this.SING_NAME = "IsRunBaidu";
			}
			/**
			 * 获取需要标志的元素
			 */
			getSignElement() {
				return document.getElementById("content_left") || {};
			}
			/**
			 * 增加标志位
			 */
			setSign() {
				let container = this.getSignElement();
				container.setAttribute(this.SING_NAME, true);
			}
			/**
			 * 判断是否存在标志位
			 */
			hasSign() {
				let container = this.getSignElement();
				return !!container.hasAttribute(this.SING_NAME);
			}
		}
		/**
		 * 导入首页样式
		 * @class IMportIndexStyle
		 */
		class ImportIndexStyle extends Style {
			constructor() {
				super();
			}
			/**
			 * 获取首页的样式
			 */
			getStyleForIndex() {
				return super.getStyleContentForIndex();
			}
			/**
			 * 导入样式
			 * @method import
			 */
			import() {
				super.add(this.getStyleForIndex())
					.end();
			}
			/**
			 * 初始化
			 * @method init
			 */
			init() {
				this.import();
			}
			/**
			 * 执行
			 * @method execute
			 */
			execute() {
				this.init();
			}
		}
		/**
		 * 导入普通结果页样式
		 * @class ImportCommonStyle
		 */
		class ImportCommonStyle extends Style {
			constructor() {
				super();
			}
			/**
			 * 样式 - 背景
			 * @method styleForBackground
			 * @returns {string} 样式
			 */
			styleForBackground() {
				let currentBackgroundURL = super.getCustonBgURL() || super.getCurrentBackgroundURL();
				if (super.isUseBackground()) {
					return `body{background-color:transparent!important}body:after{content:"";position:fixed;top:0;bottom:0;left:0;right:0;background-image:url(${currentBackgroundURL})!important;background-size:cover!important;z-index:-1}#head{background-color:hsla(0, 0%, 100%, 0.65)!important;border-bottom-color:hsla(0, 0%, 52%, 0.3)!important}#content_left .c-container,#rs{border:none!important;background: hsla(0, 0%, 100%, 0.85)!important}#form>.s_ipt_wr.bg{background:#fff!important}#u>a{color: hsl(216, 80%, 63%)!important}#u>a:after{background:transparent!important;border:1px solid!important;}`;
				} else {
					return "";
				}
			}
			/**
			 * 样式 - 固定侧边栏
			 * @method styleForFixedSilder
			 * @returns {string} 样式
			 */
			styleForFixedSilder() {
				if (super.isUseFixedSilder()) {
					return "#s_tab{left:0!important;opacity:1!important;}";
				} else {
					return "";
				}
			}
			/**
			 * 样式  - 页面布局
			 * @method styleForPageLayout
			 * @returns {string} 样式
			 */
			styleForPageLayout() {
				let currentPageLayoutType = super.getCurrentPageLayoutType();
				switch (currentPageLayoutType) {
					case 1:
						return "";
					case 2:
						return super.getStyleContentForOne();
					case 3:
						return super.getStyleContentForTwo();
					case 4:
						return super.getStyleContentForThree();
				}
			}
			/**
			 * 样式 - 菜单
			 * @method styleForMenu
			 * @returns {string} 样式
			 */
			styleForMenu() {
				return super.getStyleContentForMenu();
			}
			/**
			 * 样式 - 结果页
			 * @method styleForCommand
			 * @returns {string} 样式
			 */
			styleForCommand() {
				return super.getStyleContentForCommon();
			}
			/**
			 * 导入样式
			 * @method import
			 */
			import() {
				super.add(this.styleForCommand())
					.add(this.styleForMenu())
					.add(this.styleForPageLayout())
					.add(this.styleForFixedSilder())
					.add(this.styleForBackground())
					.end();
			}
			/**
			 * 初始化
			 * @method init
			 */
			init() {
				this.import();
			}
			/**
			 * 执行
			 * @method execute
			 */
			execute() {
				this.init();
			}
		}
		/**
		 * 百家号
		 */
		class HideBaijiahao extends Base {
			constructor() {
				super();
				this.ELEMNET_ID = "mybaijiahao";
				this.FILTER_VALUE = "baijiahao";
				this.BAIDU_SEARCH_PATH = "https://www.baidu.com/s?ie=utf-8&wd=";
			}
			/**
			 * 根据关键字搜索
			 * @param url 部分url 如?wd=1&test=2
			 * @param keyworld 有搜索的关键词
			 */
			getKeyValue(url, keyworld) {
				//移除首字母
				if (url.startsWith("?")) {
					url = url.substr(1);
				}
				//转化为数组
				let arr = url.split("&").map(value => {
					return value.split("=");
				});
				//获取关键值
				for (let [name, value] of arr) {
					if (name === keyworld) {
						return value;
					}
				}
			}
			/**
			 * 获取关键词
			 * @param url 部分url 如?wd=1&test=2
			 */
			getSearchKeyword(url) {
				let name = "wd";
				return this.getKeyValue(url, name);
			}
			/**
			 * 重定向
			 */
			redirect() {
				let filterValue = this.FILTER_VALUE;
				let templateURL = this.BAIDU_SEARCH_PATH;
				let keyValue = this.getSearchKeyword(location.search);
				if (!keyValue.includes(filterValue)) {
					location.href = templateURL + keyValue + " -" + filterValue;
				}
			}
			/**
			 * 隐藏过滤值
			 */
			hidefilterValue() {
				let keyValue = " -" + this.FILTER_VALUE;
				let reg = RegExp(keyValue);
				let input = document.getElementById("kw");
				input.value = input.value.replace(reg, "");
			}
			/**
			 * 显示输入值
			 */
			showInputValue() {
				let input = document.getElementById("kw");
				input.style.visibility = "visible";
			}
			/**
			 * 隐藏输入值
			 */
			hideinputValue() {
				let style = new Style();
				style.add("#kw{visibility:hidden}");
				style.end();
			}
			/**
			 * 判断是否存在新的输入框
			 */
			hasNewInput() {
				return !!document.getElementById(this.ELEMNET_ID);
			}
			/**
			 * 是新的input和旧的input内容保持
			 */
			replaceInputContent() {
				let input = document.getElementById(this.ELEMNET_ID);
				let oldInput = document.getElementById("kw");
				input.value = oldInput.value.trim().replace(/\s-baijiahao/, "");
			}
			/**
			 * 插入新的输入框:用于映射数据
			 */
			insertNewInput() {
				let container = document.getElementsByClassName("s_ipt_wr")[0];
				let oldInput = document.getElementById("kw");
				let input = document.createElement("input");
				input.id = this.ELEMNET_ID;
				input.type = "text";
				// input.autofocus = true;
				input.autocomplete = "off";
				input.value = oldInput.value.trim().replace(/\s-baijiahao/, "");
				input.setAttribute("maxlength", "255");
				container.appendChild(input);
				Promise.resolve().then(() => {
					input.blur();
				});
			}
			/**
			 * 对新的输入框绑定事件
			 */
			bindNewInputEvent() {
				let input = document.getElementById(this.ELEMNET_ID);
				let oldInput = document.getElementById("kw");
				input.addEventListener("keyup", () => {
					if (input.value.trim() !== "") {
						oldInput.value =
							input.value.replace(/\s-baijiahao/, "") +
							" -" +
							this.FILTER_VALUE;
					}
				}, false);
				input.blur();
				oldInput.blur();
			}
			/**
			 * 初始化
			 */
			init() {
				//重定向
				this.redirect();
				//隐藏值
				this.hideinputValue();
				Baidu.ready = () => {
					if (!this.hasNewInput()) {
						this.insertNewInput();
						this.bindNewInputEvent();
					} else {
						this.replaceInputContent();
					}
					//    this.showInputValue();
				};
			}
			/**
			 * 执行
			 */
			execute() {
				if (super.isUseHideBaiJiaHao()) {
					//this.init();
				}
			}
		}
		/**
		 * 菜单功能页
		 * @class MenuItemsOptions
		 * @extends Base
		 * @implements Template
		 */
		class MenuItemsOptions extends Base {
			constructor() {
				super();
				this.CUSTOM_LAYOUT_TAG_NAME = "baidupage";
				this.CUSTOM_SWITCH_TAG_NAME = "baiduswitch";
				this.UPDATE_BACKGROUND_ID_NAME = "baiduupdatebackground";
			}
			/**
			 * 获取菜单列表元素 ID 名称
			 */
			getMenuItemsIdName() {
				return super.getMenuItemsIdName();
			}
			/**
			 * 获取菜单保存按钮 ID 名称
			 */
			getMenuSaveIdName() {
				return super.getMenuSaveIdname();
			}
			/**
			 * 获得 HTML - 页面布局选项
			 * @param content 显示的内容
			 * @param layoutType 页面布局类型
			 */
			getContentPageSelect(content, layoutType) {
				let checked = super.getCurrentPageLayoutType() === layoutType ? "checked" : "";
				return `<li><input type="radio" name="${this.CUSTOM_LAYOUT_TAG_NAME}" value="${layoutType}" ${checked}>${content}</li>`;
			}
			/**
			 * 获得 HTML - 功能选项选项
			 * @param content 显示的内容
			 * @param selection 功能配置
			 */
			getContentFunSelect(content, name, isChecked) {
				let checked = !!isChecked ? "checked" : "";
				return `<li><input type="checkbox" name="${this.CUSTOM_SWITCH_TAG_NAME}" value="${name}" ${checked}>${content}</li>`;
			}
			/**
			 * 获得 HTML - 保存
			 * @param content 显示的内容
			 */
			getContentSava(content) {
				let menuSaveIdName = this.getMenuSaveIdName();
				return `<input id='${menuSaveIdName}' type='button' style='margin-top:3px;display:block;width:100%' value='${content}'>`;
			}
			/**
			 *
			 */
			getContentCustomBackground(content) {
				let updateBgIdName = this.UPDATE_BACKGROUND_ID_NAME;
				return `<input id='${updateBgIdName}' type='button' style='margin-top:3px;display:block;width:100%' value='${content}'>`;
			}
			//获取整体 HTML
			getContent() {
				let content = "";
				content += "<ol>页面选择";
				content += this.getContentPageSelect("普通页面", 1);
				content += this.getContentPageSelect("单页居中", 2);
				content += this.getContentPageSelect("双页居中", 3);
				content += this.getContentPageSelect("三页居中", 4);
				content += "</ol>";
				content += "<ol>功能选择";
				content += this.getContentFunSelect("去除重定向", super.getUseRedirectName(), super.isUseRedirect());
				content += this.getContentFunSelect("自动下一页", super.getUseAuoLoadNextPageName(), super.isUseAuoLoadNextPage());
				content += this.getContentFunSelect("固定侧边栏", super.getUseFixedSilderName(), super.isUseFixedSilder());
				content += this.getContentFunSelect("加载背景", super.getUseBackgroundName(), super.isUseBackground());
				// content += this.getContentFunSelect("屏蔽百家号", super.getUseHideBaiJiaHaoName(), super.isUseHideBaiJiaHao());
				content += "</ol>";
				content += this.getContentCustomBackground("修改背景");
				content += this.getContentSava("保存");
				return content;
			}
			/**
			 * 更新背景6图片地址
			 */
			updateBgURL() {
				let backgroundURL = prompt("请输入自定义的壁纸链接:");
				let reg = /^https?\:.+\.[(jpg)|(png)|(jpeg)|(gif)|(bmp)$]/;
				if (!!reg.test(backgroundURL)) {
					super.setValue(super.getCustomBgName(), backgroundURL);
					location.href = location.href;
				}
			}
			/**
			 * 绑定保存事件
			 */
			bindSavaClick() {
				let sava = document.getElementById(Configs.MENU_SAVA_ID);
				sava.onclick = event => {
					let e = event || window.event;
					//页面布局选项
					let radios = document.getElementsByName(this.CUSTOM_LAYOUT_TAG_NAME);
					for (let i = 0, radio;
						(radio = radios[i++]);) {
						if (!!radio.checked) {
							let name = super.getPageLayoutName();
							let value = radio.value;
							super.setValue(name, value);
							break;
						}
					}
					//功能选项
					let checkboxs = document.getElementsByName(this.CUSTOM_SWITCH_TAG_NAME);
					for (let i = 0, checkbox;
						(checkbox = checkboxs[i++]);) {
						let name = checkbox.value;
						if (!!checkbox.checked) {
							super.setValue(name, true);
						} else {
							super.setValue(name, false);
						}
					}
					e.stopPropagation();
					location.href = location.href;
				};
			}
			bindUpdateBackgroundEvent() {
				let element = document.getElementById(this.UPDATE_BACKGROUND_ID_NAME);
				element.onclick = () => {
					this.updateBgURL();
				};
			}
			/**
			 * 插入节点
			 */
			insertMenuItemsElement() {
				let container = document.getElementById("u"),
					content = this.getContent(),
					div = document.createElement("div");
				div.id = this.getMenuItemsIdName();
				div.style.display = "none";
				div.innerHTML = `<div>${content}</div>`;
				container.insertBefore(div, container.firstChild);
			}
			isExistMenuItemsElement() {
				return !!document.getElementById(this.getMenuItemsIdName());
			}
			/**
			 * 初始化
			 */
			init() {
				if (!this.isExistMenuItemsElement()) {
					this.insertMenuItemsElement();
					//异步执行绑定事件
					Baidu.delayRun(() => {
						this.bindSavaClick();
						this.bindUpdateBackgroundEvent();
					}, 10);
				}
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					try {
						this.init();
					} catch (e) {
						throw new Error(e);
					}
				};
			}
		}
		/**
		 * 菜单按钮
		 * @class CustomButton
		 *
		 */
		class CustomMenuButton extends Base {
			constructor() {
				super();
				this.MenuItemsOptions = new MenuItemsOptions();
			}
			/**
			 * 第二次单击隐藏
			 */
			bindClickHide() {
				document.onclick = event => {
					let e = event || window.event;
					let container = document.getElementById("container");
					let items = document.getElementById(Configs.MENU_ITEMS_ID);
					let isScreenClick = e.target ?
						e.target == container :
						e.srcElement == container;
					if (isScreenClick) {
						items.style.display = "none";
					}
				};
			}
			/**
			 * 单击打开功能选项页
			 */
			bindClick() {
				let container = document.getElementById(Configs.CUSTOM_BUTTON_ID);
				container.onclick = event => {
					let e = event || window.event;
					let items = document.getElementById(Configs.MENU_ITEMS_ID);
					let style = items.style;
					let isShow = style.display === "block";
					if (isShow) {
						style.display = "none";
					} else {
						style.display = "block";
					}
					//阻止冒泡
					e.stopPropagation();
				};
			}
			/**
			 * 获取自定义按钮的名称
			 */
			getCustomButtonIdName() {
				return super.getCustomButtonIdName();
			}
			/**
			 * 插入节点
			 */
			insertCustomButtonElement() {
				let container = document.getElementById("u");
				let div = document.createElement("a");
				div.id = this.getCustomButtonIdName();
				div.innerHTML = "自定义";
				container.insertBefore(div, container.firstChild);
			}
			/**
			 * 是否存在自定义按钮
			 */
			isExistCustomButtonElement() {
				return !!document.getElementById(this.getCustomButtonIdName());
			}
			/**
			 * 初始化
			 */
			init() {
				if (!this.isExistCustomButtonElement()) {
					this.insertCustomButtonElement();
					//异步绑定事件
					Baidu.delayRun(() => {
						this.bindClick();
						this.bindClickHide();
					}, 10);
				}
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					this.init();
				};
				//执行菜单功能面板
				Promise.resolve().then(() => {
					this.MenuItemsOptions.execute();
				});
			}
		}
		
		/**
		 * 过滤内容
		 */
		class FilterContent extends Base{
			removeAds(item){
				let styleContent = item.getAttribute("style");
				// console.log(styleContent);
				if (styleContent !== null ) {
					// item.parentNode.removeChild(item);
					item.removeAttribute("style");
					return true;
				}
				return false;
			}
			
			removeDryTpl(item){
				let tplBlackLists = [
					//"wenda_abstract_pc",
					"med_qa",
					"b2b_straight",
					"recommend_list",
					"ads_b2c_universal_card",
					"b2b_factory2",
					"vmp_zxenterprise_new",
					"short_video",
				];
				let tplCurrentContent = item.getAttribute("tpl");
				// console.log(tplCurrentContent);
				for (let tplBlackContent of tplBlackLists) {
					if (tplBlackContent === tplCurrentContent) {
						// item.parentNode.removeChild(item);
						// alert(tplCurrentContent);
						return true;
					}
				}
				return false;
			}
			
			
			removeRepeatElement(item){
					if (item.id === "1" ){
						let selectors = item.querySelectorAll("a.m.c-gap-left");
						for (let selector of selectors){
					        let content = selector.textContent || selector.innerText;
							if (content == "广告" ){
								return true;
							}
						}
					}
				return false;
			}
			
			//移除不相关数据
			isDryElement(item) {
				let isDry = false;
				
				if (!isDry) {
					isDry = this.removeAds(item);
				}
				
				if (!isDry) {
					isDry = this.removeDryTpl(item);
				}
				
				if (!isDry){
					isDry = this.removeRepeatElement(item);
				}
				
				return isDry;
			}
		}
		
		/**
		 * 过滤内容
		 */
		class FirstFilter extends FilterContent{
			
			getItems(){
				return document.getElementById("container").querySelectorAll("#content_left>.c-container,#content_left>.result-op:not([class*='c-container'])")
			}
			
			removeItem(item){
				// console.log(item);
				item.classList.add("bd_none");
				item.parentNode.removeChild(item);
			}
			
			clearUselessItem(){
				let items = this.getItems();
				for(let item of items){
					let isDry = super.isDryElement(item);
					if (isDry){
						this.removeItem(item);
					}
				}
			}
			
			/**
			 * 初始化
			 */
			init() {
				this.clearUselessItem();
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					this.init();
				};
			}
		}
		
		
		
		/**
		 * 多页布局
		 * @class MUlPageLayout
		 */
		class MulPageLayout extends FilterContent {
			constructor() {
				super();
				this.container = null;
				this.lists = null;
				//多列布局值集合
				this.layoutTypes = [3, 4];
				//当前布局类型
				this.layoutType = super.getCurrentPageLayoutType();
				//根据 类名 模拟高度
				this.VIRTUAL_HEIGHTS_BY_CLASSNAE = [{
						name: ".c-container>.op-b2b-straight",
						value: 420
					},
					{
						name: ".c-container>.c-offset",
						value: 320
					},
					{
						name: ".c-container>.c-border",
						value: 270
					},
					{
						name: ".c-container>.op-tieba-general-lookmore",
						value: 260
					},
					{
						name: ".c-container>.op-img-address-desktop-cont",
						value: 210
					},
					{
						name: ".c-container>.c-gap-top-small",
						value: 130
					}
				];
				//根据 srcid 属性值 模拟高度
				this.VIRTUAL_HEIGHTS_BY_SRCID = [{
						name: 1599,
						value: 128
					},
					{
						name: 1508,
						value: 170
					},
					{
						name: 1527,
						value: 170
					},
					{
						name: 1528,
						value: 220
					},
					{
						name: 1529,
						value: 220
					},
					{
						name: 1537,
						value: 510
					},
					{
						name: 1539,
						value: 280
					},
					{
						name: 1545,
						value: 230
					},
					{
						name: 1547,
						value: 230
					},
					{
						name: 4515,
						value: 540
					},
					{
						name: 5103,
						value: 400
					},
					{
						name: 8041,
						value: 260
					},
					{
						name: 8191,
						value: 200
					},
					{
						name: 10,
						value: 260
					},
					{
						name: 13,
						value: 220
					},
					{
						name: 19,
						value: 200
					}
				];
			}
			/**
			 * 是否为多列布局
			 * @return {boolean}
			 */
			isMulLayout() {
				let layoutType = this.layoutType;
				let layoutTypes = this.layoutTypes;
				return layoutTypes.includes(layoutType);
			}
			/**
			 * 初始化
			 */
			resetDOM() {
				this.container = null;
				this.lists = null;
			}
			/**
			 * 获取 #content_left 节点
			 */
			getDomForContainer() {
				if (!this.container) {
					this.container = document.getElementById("content_left");
				}
				return this.container;
			}
			getDomForSearchResult() {
				// let container = this.getDomForContainer();
				// return container.getElementsByClassName("c-container");
				return document.querySelectorAll("#content_left>.c-container");
			}
			/**
			 * 获取 list 节点
			 */
			getDomForLists() {
				if (!this.lists) {
					let container = this.getDomForContainer();
					this.lists = container.getElementsByClassName("list");
				}
				return this.lists;
			}
			//获取list高度合集
			getListsHeight() {
				let lists = this.getDomForLists();
				let heights = [];
				for (let i = 0, list;
					(list = lists[i++]);) {
					heights.push(list.clientHeight);
				}
				return heights;
			}
			/**
			 * 模拟高度
			 * 防止获取真实高度导致性能问题
			 * @param item
			 */
			getItemVirtualHeight(item) {
				// 获取虚拟高度合集
				let VIRTUAL_DATAS = this.VIRTUAL_HEIGHTS_BY_SRCID;
				//默认高度
				let height = 122;
				//匹配 srcid 正则
				let reg = /srcid="\d+"/;
				//获取srcid
				let srcid = Number(/\d+/.exec(reg.exec(item.outerHTML)));
				//根据srcid值获取虚拟高度
				for (let i = 0, data;
					(data = VIRTUAL_DATAS[i++]);) {
					//大于 10000 直接赋予新高度
					if (srcid > 10000) {
						height = 310;
						break;
					} else if (srcid === data["name"]) {
						height = data["value"];
						break;
					}
				}
				return height;
			}
			/**
			 * 01 - 添加内容到lists
			 * 使用 DOM 到 DOM, 即将 #content_left 下的子元素移动到 lists
			 * 注意:需要提前将 DOM片段 添加到 #content_left下
			 */
			addWebUseDomToDom_NoUserful() {
				let container = this.getDomForContainer();
				let lists = this.getDomForLists();

				let blackLists = [
					`not([tpl='wenda_abstract_pc'])`,
					`not([tpl='med_qa'])`,
					`not([tpl='b2b_straight'])`,
				]
				let selector = "#content_left>.c-container" + ":" + blackLists.join(":");
				let oldElements = container.querySelectorAll(selector);
				// let olditems = container.querySelectorAll(selector);
				let heights = this.getListsHeight();
				let frames = [];
				let items = oldElements;

				//获取旧元素的高度
				let oldElementsHeights = [];
				for (let item of oldElements) {
					oldElementsHeights.push(item.clientHeight);
				}

				//初始化
				for (let i = 0, length = lists.length; i < length; i++) {
					//缓存
					frames.push(document.createDocumentFragment());
				}

				//将 item 添加到虚拟DOM中
				for (let i = 0, item;
					(item = items[i++]);) {
					//获取最小的高度值
					let minHeight = Reflect.apply(Math.min, null, heights);
					//获取最小的高度的索引值
					let index = heights.indexOf(minHeight);
					//添加到高度
					//heights[index] += item.clientHeight;
					heights[index] += oldElementsHeights[i - 1];
					//缓存
					frames[index].appendChild(item);

				}

				//隐藏旧节点
				let needRemoveElements = container.querySelectorAll("#content_left>.c-container");
				for (let item of needRemoveElements) {
					//1.隐藏元素
					item.style.display = 'none';
					//2.延迟删除
					Promise.resolve().then(() => {
						item.parentNode.removeChild(item);
					});
				}

				//添加到真实DOM
				for (let i = 0, length = lists.length; i < length; i++) {
					lists[i].appendChild(frames[i]);
				}

				//删除节点
				// for(let item of needRemoveElements){
				//     item.parentNode.removeChild(item);
				// }

			}
			
			removeAds(item){
				return super.removeAds(item);
			}
			
			removeDryTpl(item){
				return super.removeDryTpl(item);
			}
			
			
			removeRepeatElement(item){
				return super.removeRepeatElement(item);
			}
			
			

			//移除不相关数据
			removeDryElement(items) {
				
				for (let i = 0, item; item = items[i++];) {
					
					let isRemove = false;
					
					if (!isRemove) {
						isRemove = this.removeAds(item);
					}
					
					if (!isRemove) {
						isRemove = this.removeDryTpl(item);
					}
					
					if (!isRemove){
						isRemove= this.removeRepeatElement(item);
					}
					
					if (isRemove){
						item.classList.add("baidu_remove")
						item.setAttribute("style","display:none!important;");
						item.innerHTML= "";
						// i--;
					}
					
					
				}
				return items;
			}
			
			//移除不相关数据
			isDryElement(item) {
				let isDry = false;
				
				if (!isDry) {
					isDry = this.removeAds(item);
				}
				
				if (!isDry) {
					isDry = this.removeDryTpl(item);
				}
				
				if (!isDry){
					isDry = this.removeRepeatElement(item);
				}
				
				return isDry;
			}
			
			/**
			 * 00 - 添加内容到lists
			 * 使用 DOM 到 DOM, 即将 #content_left 下的子元素按顺序移动到 lists
			 */
			addWebUseDomToDomWithOder() {
				let content_left = document.getElementById("content_left");
				content_left.classList.add("bd-hide");
				
				//获取所有元素
				let items = this.getDomForSearchResult();
				// let oldItems = document.getElementById("content_left").cloneNode(true).querySelectorAll(".c-container");
				let lists = this.getDomForLists();
				let listsLength = lists.length;
				
				//获取高度合集
				let itemHeights = [];
				let sumItemHeight = 0;
				let averageItemHeight = 0;
				for (let i = 0, length = items.length; i < length; i++){
					let item = items[i];
					let clientHeight = Number(item.clientHeight);
					let isDry = this.isDryElement(item);
					if (isDry){
						item.classList.add("bd-none");
						itemHeights[i] = 0 ;
						sumItemHeight += 0;
					}else{
						itemHeights[i] = clientHeight;
						sumItemHeight += clientHeight;
					}
					
				}
				
				averageItemHeight = sumItemHeight > 300 ? (sumItemHeight-100)/listsLength : 0;
				
				// console.log("itemHeights:",itemHeights);
				// console.log("sumItemHeight:", sumItemHeight);
				// console.log("averageItemHeight", averageItemHeight);
				
				//隐藏元素
				
				content_left.classList.add("bd-none");
				
				//移动元素
				let listIndex = 0;
				let virtualHeight = 0;
				let targetHeight = averageItemHeight;
				for(let i = 0, length = itemHeights.length; i < length; i++){
					let itemHeight = itemHeights[i];
					let item = items[i];
					
					if (listIndex >= listsLength){
						break;
					}
					
					if (targetHeight === 0){
						break;
					}
					
					if (itemHeight === 0){
						continue;
					}
					
					if (!item){
						continue;
					}
					
					
					
					virtualHeight += itemHeight;
					// console.log(virtualHeight);
					if(virtualHeight < targetHeight){
						lists[listIndex].appendChild(item);
					}else{
						targetHeight += targetHeight;
						listIndex ++;
					}
					
				}
				
				//屏蔽非必须元素
				let sytleContent = `#content_left>.c-container{display:none!important;}`;
				
				super.addStyle(sytleContent);
				
				//开启显示
				content_left.classList.remove("bd-none","bd-hide");
				
				return;
				
				
				
				
				
			
			}

			/**
			 * 01 - 添加内容到lists
			 * 使用 DOM 到 DOM, 即将 #content_left 下的子元素移动到 lists
			 * 注意:需要提前将 DOM片段 添加到 #content_left下
			 */
			addWebUseDomToDom() {
				let items = this.getDomForSearchResult();
				let lists = this.getDomForLists();
				let heights = this.getListsHeight();
				let itemHeighs = [];
				for (let i = 0, item; item = items[i++];){
					itemHeighs[i] = item.clientHeight;
				}
				
				//删除非必须结果列表
				items = this.removeDryElement(items);
				
				//插入元素
				for (let i = 0, item;(item = items[i++]);) {
					if (item.classList.contains("baidu_remove")){
						item.removeAttribute("id");
						continue;
					}
					//获取最小的高度值
					let minHeight = Reflect.apply(Math.min, null, heights);
					//获取最小的高度的索引值
					let index = heights.indexOf(minHeight);
					//添加到高度到高度数组中,以便获取最小的高度
					
					// heights[index] += item.clientHeight;
					heights[index] += itemHeighs[i];

					//插入元素
					lists[index].appendChild(item);
				}
				
				
				

			}
			/**
			 * 02 - 添加内容到lists
			 *
			 *
			 * @param frame DOM片段
			 */
			addWebUseFrameToDom(frame) {
				//获取lists
				let lists = this.getDomForLists();
				//获取列表合集
				let items = frame.getElementsByClassName("c-container");
				//获取初始化高度集合
				let heights = this.getListsHeight();
				//将 item 添加到list中
				for (let i = 0, item;
					(item = items[i]);) {
					//获取高度合集
					//获取最小的高度值
					let minHeight = Reflect.apply(Math.min, null, heights);
					//获取最小的高度的索引值
					let index = heights.indexOf(minHeight);
					//添加到list中
					lists[index].appendChild(item);
					//更新高度
					heights = this.getListsHeight();

					item.parentNode.removeChild(item);
				}
			}
			/**
			 * 03 - 添加内容到 lists
			 * 使用"模拟高度"进行添加
			 *
			 * @param frame DOM片段
			 */
			addWebUseVirtualToDom(frame) {
				let lists = this.getDomForLists();
				let frames = [];
				//获取列表合集
				let items = frame.getElementsByClassName("c-container");

				if (items.length <= 0) {
					return;
				}
				//获取初始化高度集合
				let heights = this.getListsHeight();
				//初始化
				for (let i = 0, length = lists.length; i < length; i++) {
					frames[i] = document.createDocumentFragment();
				}
				//将 item 添加到list中
				for (let i = 0, item;
					(item = items[i]);) {
					//获取最小的高度值
					let minHeight = Reflect.apply(Math.min, null, heights);
					//获取最小的高度的索引值
					let index = heights.indexOf(minHeight);
					//获取模拟高度
					heights[index] += this.getItemVirtualHeight(item);
					//添加到list中
					frames[index].appendChild(item);
				}
				Baidu.delayRun(() => {
					//插入内容到list
					for (let i = 0, length = lists.length; i < length; i++) {
						lists[i].appendChild(frames[i]);
					}
				}, 1);
			}
			/**
			 * 是否存在list节点
			 */
			hasListNode() {
				let lists = this.getDomForLists();
				return lists.length > 0;
			}
			/**
			 * 向网页添加列表
			 */
			insertListNode() {
				let layoutType = this.layoutType;
				let container = this.getDomForContainer();
				let frame = document.createDocumentFragment();
				//创建list节点
				for (let i = 1, div, length = layoutType; i < length; i++) {
					div = document.createElement("div");
					div.id = "list" + i;
					div.className = "list";
					frame.appendChild(div);
				}
				//将节点插入到文档中
				container.insertBefore(frame, container.firstChild);
				return this;
			}
			/**
			 * 添加内容到 lists
			 */
			addListContent(frame) {
				this.resetDOM();
				Baidu.delayRun(() => {
					this.addWebUseVirtualToDom(frame);
				}, 0);
			}

			/**
			 * 初始化
			 */
			init() {
				try {
					this.resetDOM();
					if (!this.hasListNode()) {
						//插入list节点并刷新节点
						this.insertListNode();
					}
					this.addWebUseDomToDomWithOder();

				} catch (error) {
					console.error(error);
				}
			}

			isExistContentLeft() {
				let container = document.getElementById("content_left");
				return container.length > 0 ? true : false;
			}




			/**
			 * 执行
			 */
			execute() {
				if (this.isMulLayout()) {
					Baidu.ready = () => {
						this.init();
					};
				}
			}
		}
		/**
		 * 自动加载下一页
		 * @class AutoLoadNextPage
		 */
		class UseAutoLoadNextPage extends Base {
			/**
			 * 构造函数
			 */
			constructor() {
				super();
				//实例化 - 多页布局
				this.MulpageLayout = new MulPageLayout();
				//实例化 - 重定向
				this.Redirect = new Redirect();
				//实例化 -
				this.Parser = new DOMParser();
			}
			/**
			 * 重置
			 */
			reset() {
				//是否第一次执行
				this.isFirstRun = true;
				//是否导入过
				(this.isImport = false),
				//下一页真实地址
				(this.realNextURL = null);
				//模板地址
				this.templateURL = null;
				//步进值(默认值)
				this.step = 0;
				//每页起始值
				this.count = 0;
				//偏移高度
				this.offsetHight = 1000;
				//缓存
				this.cache = [];
				//缓存量
				this.cacheSize = 1;
				//节点缓存
				this.container = document.getElementById("content_left");
			}
			/**
			 * 获取真实下一个的地址
			 * @returns {string} 下一页地址
			 */
			getNextPageRealURL() {
				if (!this.realNextURL) {
					let page = document.getElementById("page");
					this.realNextURL = page
						.getElementsByClassName("n")[0]
						.getAttribute("href");
				}
				return this.realNextURL;
			}
			/**
			 * 获取步进值
			 * @returns {number} 步进值
			 */
			getNextPageStepValue() {
				if (!this.step) {
					//提取 &pn=20 中的20
					let regParam = /(&pn=\d+)/;
					let regValue = /\d+/;
					let result = regParam.exec(this.getNextPageRealURL());
					this.step = Number(regValue.exec(result));
				}
				return this.step;
			}
			/**
			 * 获取模板地址
			 * @returns {string} this.templateURL: 模板地址
			 */
			getTempletURL() {
				this.templateURL =
					this.templateURL ||
					this.getNextPageRealURL().replace(/&pn=\d+/, "");
				return this.templateURL;
			}
			/**
			 * 获取下一页合成地址
			 * @returns {sting} 下一页的地址
			 */
			getNextPageComposeURL() {
				this.count += this.getNextPageStepValue();
				return this.getTempletURL() + `&pn=${this.count}`;
			}
			/**
			 * 判断是否存在缓存
			 * @returns {boolean} 存在: true
			 * @returns {boolean} 不存在:false
			 */
			hasCache() {
				return this.cache.length >= this.cacheSize;
			}
			/**
			 * 将响应文本添加到缓存中
			 * @param responseText 响应文本
			 */
			addCache(responseText) {
				//转化为DOM对象
				let reg = /<body[\s\S.]+<\/body>/;
				let parser = this.Parser;
				let htmlDoc = parser.parseFromString(reg.exec(responseText)[0], "text/html");
				//获取Items
				let items = htmlDoc
					.getElementById("content_left")
					.getElementsByClassName("c-container");
				//添加到缓存
				let frame = document.createElement("div");
				//appendchild 自动执行迭代器 导致 i++ (小心);
				for (let i = 0, item;
					(item = items[i]);) {
					frame.appendChild(item);
				}
				//加入缓存
				this.cache.push(frame);
			}
			/**
			 * 监测滚动位置
			 */
			checkScrollPosition() {
				let element = document.documentElement,
					clientHeight = element.clientHeight,
					scrollTop = element.scrollTop ||
					window.pageYOffset ||
					document.body.scrollTop ||
					0,
					scrollHeight = Number(element.scrollHeight);
				//判断
				if (clientHeight + scrollTop + this.offsetHight >
					scrollHeight) {
					this.removeScrollEvent();
					this.task();
				}
			}
			/**
			 * 移除滚动事件
			 */
			removeScrollEvent() {
				document.onscroll = event => {
					let e = event || window.event;
					e.preventDefault();
				};
				return this;
			}
			/**
			 * 绑定滚动触发事件
			 */
			bindScrollEvent() {
				document.onscroll = () => {
					this.checkScrollPosition();
				};
			}
			/**
			 * 将 DOM 插入到相应的位置
			 */
			addItemsToWeb() {
				//插入内容到DOM节点
				if (this.MulpageLayout.isMulLayout()) {
					this.MulpageLayout.addListContent(this.cache.shift());
				} else {
					//this.container.innerHTML += this.cache.shift().innerHTML;
					let div = document.createElement("div");
					div.id = String("Baidu-" + String(new Date().getTime()));
					div.innerHTML = this.cache.shift().outerHTML;
					this.container.appendChild(div);
				}
			}
			/**n
			 * 发送请求
			 */
			requireNextPageContent() {
				super.xmlhttpRequest({
					method: "GET",
					url: this.getNextPageComposeURL(),
					timeout: 3000,
					responseType: "text",
					onload: response => {
						if (response.status === 200 ||
							response.status === 304) {
							//如果不存在缓存,再发一次
							if (!this.hasCache()) {
								this.requireNextPageContent();
							}
							//添加响应文本到缓存
							this.addCache(response.responseText);
							//开始导入数据到网页
							if (!this.isImport) {
								this.import();
							}
						}
					},
					onerror: response => {
						console.error(response);
					}
				});
			}
			/**
			 * 导入数据到网页
			 */
			import() {
				this.isImport = true;
				//添加内容到网页
				this.addItemsToWeb();
				//重定向
				this.Redirect.execute();
				//绑定滚动事件
				Baidu.delayRun(() => {
					this.removeScrollEvent().bindScrollEvent();
				}, 3);
			}
			/**
			 * 任务调度
			 * @param URL
			 */
			task() {
				//设置有导入过
				this.isImport = false;
				//发送请求
				this.requireNextPageContent(); //如果有缓存
				//如果存在缓存
				if (this.hasCache()) {
					this.import();
				}
			}
			/**
			 * 隐藏元素
			 */
			hideElement() {
				let rs = document.getElementById("rs_new");
				let page = document.getElementById("page");
				rs.style.visibility = "hidden";
				page.style.visibility = "hidden";
			}
			/**
			 * 初始化
			 */
			init() {
				//重置配置
				this.reset();
				//开始加载
				this.task();
				//隐藏元素
				Baidu.delayRun(() => {
					this.hideElement();
				}, 3);
			}
			/**
			 * 入口
			 * @returns {void}
			 */
			execute() {
				if (super.isUseAuoLoadNextPage()) {
					Baidu.ready = () => {
						this.init();
					};
				}
			}
		}
		/**
		 * 重定向
		 * @class Redirect
		 */
		class Redirect extends Base {
			constructor() {
				super();
				//重定向后需添加类名(防止重复重定向)
				this.REDIRECT_CLASS_NAME = "isredirect";
			}
			/**
			 * 重定向
			 * @param item a节点
			 */
			redirect(item) {
				super.xmlhttpRequest({
					method: "HEAD",
					url: item.href,
					onload: response => {
						let realURL = response.finalUrl;
						let whiteLists = [
							"wenku.baidu.com",
						]
						//加入重定向标志
						item.className = this.REDIRECT_CLASS_NAME;
						//移除不必要的属性
						item.removeAttribute("data-click");
						//排除白名单,防止有些网站不能正常打开
						for (let list of whiteLists) {
							if (realURL.includes(list)) {
								return;
							}
						}
						//替换地址
						item.href = realURL;

						//去除百家号
						//console.log(new Base().isUseHideBaiJiaHao());
						// if (realURL.includes("baijiahao") && new Base().isUseHideBaiJiaHao()) {
						// 	let selector = item.parentNode.parentNode;
						// 	if (selector.classList.contains("c-container")) {
						// 		selector.classList.add("bd-none");
						// 	}
						// }

					}
				});
			}
			/**
			 * 获取未重定向链接
			 */
			getItems() {
				return document.getElementById("content_left").querySelectorAll("h3>a:not([class])");;
			}
			/**
			 * 开始
			 */
			start() {
				
				let items = this.getItems();
				for (let i = 0, item;
					(item = items[i++]);) {
					//延时执行
					Baidu.delayRun(() => {
						this.redirect(item);
					}, i);
				}
			}
			/**
			 * 初始化
			 */
			init() {
				Baidu.delayRun(() => {
					this.start();
				}, 1);
			}
			/**
			 * 执行
			 */
			execute() {
				if (super.isUseRedirect()) {
					Baidu.ready = () => {
						this.init();
					};
				}
			}
		}
		/**
		 * 回到顶部
		 * @class BackToTop
		 */
		class BackToTop {
			/**
			 * 单击回到顶部
			 */
			bindClickEvent() {
				let container = document.getElementsByClassName("s_form")[0];
				container.onclick = event => {
					let e = event || window.event;
					let isContainer = e.target ?
						e.target === container :
						e.srcElement === container;
					if (isContainer) {
						//setInterval方案
						let element = document.documentElement;
						let body = document.body;
						let node = element.scrollTop ? element : body;
						let top = node.scrollTop;
						let step = top / 20;
						let timer = setInterval(() => {
							if (node.scrollTop <= 0) {
								node.scrollTop = 0;
								clearInterval(timer);
							}
							node.scrollTop -= step;
						}, 10);
						e.stopPropagation();
					}
				};
			}
			/**
			 * 初始化
			 */
			init() {
				this.bindClickEvent();
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					this.init();
				};
			}
		}
		/**
		 * 谷歌
		 * 双击使用 google 搜索
		 * @class Google
		 */
		class Google {
			constructor() {
				this.GOOGLE_SEARCH_PATH = "https://www.google.com/search?q=";
			}
			getInputContent() {
				return document.getElementById("kw").value.trim();
			}
			googleSearch() {
				let url = this.GOOGLE_SEARCH_PATH +
					encodeURIComponent(this.getInputContent());
				window.open(url);
			}
			/**
			 * 绑定双击打开Google搜索
			 */
			bindDoubleClickEvent() {
				let button = document.getElementById("su");
				button.ondblclick = () => {
					this.googleSearch();
				};
			}
			/**
			 * 初始化
			 */
			init() {
				this.bindDoubleClickEvent();
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					this.init();
				};
			}
		}
		class ReplaceSearchEvent extends Base{
			
			search(searchContent){
				if (searchContent.trim() != "") {
					let url = "https://www.baidu.com/s?ie=UTF-8&wd="+encodeURIComponent(searchContent.trim());;
					location.href = url;
				}
				
			}
			
			getSearchContent(){
				let selector = document.getElementById("kw");
				return selector.value;
			}
			
			replaceButtonClickEvent(){
				let selector = document.getElementById("su");
				// su.style.color = "red";
				su.onclick = ()=>{
					let searchContent = this.getSearchContent();
					// alert(searchContent);
					this.search(searchContent);
					return false;
				}
				
			}
			
			
			/**
			 * 初始化
			 */
			init() {
				try {
					this.replaceButtonClickEvent();
				} catch (error) {}
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					this.init();
				};
			}
		}
		
		
		/**
		 * 替换首页搜索栏
		 * @class ReplaceSearch
		 */
		class ReplaceSearch extends Base {
			constructor() {
				super();
				this.NEW_BAIDU_SEARCH_ID_NAME = "baiduinput";
				this.ASSOCIATION_ID_NAME = "badiduassociation";
				this.PANEL_ITEM_SELECED_CLASS = "baiduselected";
				this.SEARCH_DATA_NAME = "data-content";
				this.count = 0;
				this.BAIDU_SEARCH_PATH = "https://www.baidu.com/s?ie=UTF-8&wd=";
				this.BAIDU_ASSOCIATION_SEARCH_PATH = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=";
			}
			/**
			 * 获取新搜索的内容
			 */
			getNewSearchInputContent() {
				return document.getElementById(this.NEW_BAIDU_SEARCH_ID_NAME).value.trim() || "";
			}
			/**
			 * 搜索
			 */
			search() {
				let inputContent = this.getNewSearchInputContent();
				if (inputContent !== "") {
					// if (!super.isUseHideBaiJiaHao()) {
					// 	location.href =
					// 		this.BAIDU_SEARCH_PATH +
					// 		encodeURIComponent(inputContent);
					// } else {
					// 	location.href =
					// 		this.BAIDU_SEARCH_PATH +
					// 		encodeURIComponent(inputContent) +
					// 		" -baijiahao";
					// }

					location.href =
						this.BAIDU_SEARCH_PATH +
						encodeURIComponent(inputContent);
				}
			}
			/**
			 * 是否显示面板
			 * @param isShow 是否显示面板
			 */
			isshowPannel(isShow = true) {
				let panel = document.getElementById(this.ASSOCIATION_ID_NAME);
				if (isShow) {
					panel.style.display = "none";
				} else {
					panel.style.display = "block";
				}
			}
			/**
			 * 插入节点
			 * 覆盖原来的搜索框
			 */
			coverBaiduInputElement() {
				//屏蔽原来文本输入
				let oldInput = document.getElementById("kw");
				oldInput.setAttribute("disabled", "disabled");
				let container = document.getElementById("s_kw_wrap") ||
					document.getElementsByClassName("s_ipt_wr")[0];
				let div = document.createElement("input");
				div.id = this.NEW_BAIDU_SEARCH_ID_NAME;
				div.type = "text";
				div.autofocus = true;
				div.autocomplete = "off";
				div.setAttribute("list", this.ASSOCIATION_ID_NAME);
				container.appendChild(div);
				//延时聚焦
				Promise.resolve().then(() => {
					document.getElementById(this.NEW_BAIDU_SEARCH_ID_NAME).focus();
				});
			}
			/**
			 * 绑定覆盖百度输入框事件
			 */
			bindCoverBaiduInputEvent() {
				/**
				 * 绑定提交事件
				 */
				let bindSubmit = () => {
					let button = document.getElementById("su");
					button.setAttribute("type", "button");
					button.onclick = event => {
						let e = event || window.event;
						this.search();
					};
				};
				bindSubmit();
				/**
				 * 检测输入
				 */
				let bindKeydown = () => {
					let input = document.getElementById(this.NEW_BAIDU_SEARCH_ID_NAME);
					input = document.getElementById("form");
					input.onkeydown = event => {
						let e = event || window.event;
						let keyCode = e.keyCode || e.which || e.charCode;
						if (keyCode === 13) {
							this.search();
						}
					};
				};
				bindKeydown();
			}
			/**
			 * 插入联想搜索面板
			 */
			inserAssociationPanel() {
				let datalist = document.createElement("ul");
				let input = document.getElementById("form");
				datalist.id = this.ASSOCIATION_ID_NAME;
				input.appendChild(datalist);
			}
			/**
			 * 开始联想搜索
			 */
			startAssociationSearch() {
				let input = document.getElementById(this.NEW_BAIDU_SEARCH_ID_NAME);
				input.oninput = () => {
					let inputContent = input.value.trim();
					let inputContentURL = this.BAIDU_ASSOCIATION_SEARCH_PATH + inputContent;
					let datalist = document.getElementById(this.ASSOCIATION_ID_NAME);
					//如果数据为空,则退出
					if (inputContent.length < 1) {
						datalist.innerHTML = "";
						return;
					}
					//与服务交换数据
					super.xmlhttpRequest({
						method: "GET",
						url: inputContentURL,
						timeout: 3000,
						responseType: "text",
						onload: response => {
							if (response.status === 200 ||
								response.status === 304) {
								let searchData = response.responseText;
								//unicode 编码转中文
								searchData = unescape(searchData.replace(/\\\u/g, "%u"));
								//定义正则
								let reg = /\[.*\]/g;
								let content = reg.exec(searchData)[0];
								//删除首尾字符 "[]"
								let datas = content.substr(1).substr(0, content.length - 2).split(",");
								//加载联想数据
								this.LoadAssociationSearchDatas(datas);
							}
						},
						onerror: response => {
							console.error(response);
						}
					});
				};
			}
			/**
			 * 加载联想数据到面板中
			 * @param datas 联想数据
			 */
			LoadAssociationSearchDatas(datas) {
				let datalist = document.getElementById(this.ASSOCIATION_ID_NAME);
				let inputValue = document.getElementById(this.NEW_BAIDU_SEARCH_ID_NAME).value.trim();
				let frame = document.createDocumentFragment();
				for (let data, i = 0; data = datas[i++];) {
					let option = document.createElement("li");
					//去除双引号
					data = data.replace("\"", "").replace("\"", "");
					//赋值
					option.setAttribute(this.SEARCH_DATA_NAME, data);
					option.innerHTML = data.concat("</b>").replace(inputValue, inputValue + "<b>");
					frame.appendChild(option);
				}
				datalist.innerHTML = "";
				datalist.appendChild(frame);
				this.count = 0;
			}
			/**
			 * 绑定联想事件
			 */
			bindAssociationEvent() {
				let input = document.getElementById(this.NEW_BAIDU_SEARCH_ID_NAME);
				let panel = document.getElementById(this.ASSOCIATION_ID_NAME);
				panel.onclick = (event) => {
					let e = event || window.event;
					let target = e.target || e.srcElement;
					if (target.nodeName.toUpperCase() == "LI") {
						input.value = target.getAttribute(this.SEARCH_DATA_NAME);
						this.search();
						return;
					}
					if (target.nodeName.toUpperCase() == "B") {
						input.value = target.parentNode.getAttribute(this.SEARCH_DATA_NAME);
						this.search();
						return;
					}
				};
				document.onkeydown = (event) => {
					let e = event || window.event;
					let keyCode = e.keyCode || e.which || e.charCode;
					//方向键下
					if (keyCode == 40) {
						let lis = panel.getElementsByTagName("li");
						let length = lis.length;
						if (this.count >= length) {
							this.count = 0;
						}
						for (let i = 0, li; li = lis[i++];) {
							li.removeAttribute("class");
						}
						lis[this.count].classList.add(this.PANEL_ITEM_SELECED_CLASS);
						input.value = lis[this.count].getAttribute(this.SEARCH_DATA_NAME);
						this.count++;
						return false;
					}
					//方向键上
					if (keyCode == 38) {
						let lis = panel.getElementsByTagName("li");
						let length = lis.length;
						if (--this.count < 0) {
							this.count = length - 1;
						}
						for (let i = 0, li; li = lis[i++];) {
							li.removeAttribute("class");
						}
						lis[this.count].classList.add(this.PANEL_ITEM_SELECED_CLASS);
						input.value = lis[this.count].getAttribute(this.SEARCH_DATA_NAME);
						return false;
					}
				};
				/**
				 * 禁止 input 上方向键功能
				 */
				input.onkeydown = (event) => {
					let e = event || window.event;
					let keyCode = e.keyCode || e.which || e.charCode;
					if (keyCode == 38) {
						e.preventDefault();
						return false;
					}
				};
				/**
				 * 鼠标滑过,移除类名
				 */
				panel.onmouseover = (event) => {
					let e = event || window.event;
					let target = e.target || e.srcElement;
					let lis = panel.getElementsByTagName("li");
					//移除类名
					for (let i = 0, li; li = lis[i++];) {
						if (li == target) {
							this.count = i - 1;
						}
						li.removeAttribute("class");
					}
					//li标签触发
					if (target.nodeName.toUpperCase() == "LI") {
						target.classList.add(this.PANEL_ITEM_SELECED_CLASS);
						return;
					}
					//b标签触发
					if (target.nodeName.toUpperCase() == "B") {
						target.parentNode.classList.add(this.PANEL_ITEM_SELECED_CLASS);
						return;
					}
				};
				//点击触发
				panel.onclick = (event) => {
					let e = event || window.event;
					let target = e.target || e.srcElement;
					//li标签触发
					if (target.nodeName.toUpperCase() == "LI") {
						input.value = target.getAttribute(this.SEARCH_DATA_NAME);
						this.search();
						return;
					}
					//b标签触发
					if (target.nodeName.toUpperCase() == "B") {
						input.value = target.parentNode.getAttribute(this.SEARCH_DATA_NAME);
						this.search();
						return;
					}
				};
			}
			/**
			 * 初始化 input替换
			 */
			initCoverBaiduInputElement() {
				this.coverBaiduInputElement();
				Promise.resolve().then(() => {
					this.bindCoverBaiduInputEvent();
				});
			}
			/**
			 * 初始化联想搜索
			 */
			initAssociationSearch() {
				this.inserAssociationPanel();
				Promise.resolve().then(() => {
					this.startAssociationSearch();
					this.bindAssociationEvent();
				});
			}
			/**
			 * 初始化
			 */
			init() {
				try {
					this.initCoverBaiduInputElement();
					Promise.resolve().then(() => {
						this.initAssociationSearch();
					});
				} catch (e) {
					throw new Error(e);
				}
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					this.init();
				};
			}
		}
		/**
		 * 快捷键
		 * @class ShortcutKeys
		 */
		class ShortcutKeys {
			constructor() {
				this.Google = new Google();
				this.filters = Configs.FILTERS;
				this.target = null;
				this.KEY_ENTER = 13;
				this.KEY_ALT = 18;
				this.KEY_SHIFT = 16;
				this.KEY_CTRL = 17;
				this.KEY_GOOGLE = "G";
			}
			/**
			 * 过滤搜索
			 */
			filterSearch(filterName) {
				//移除如 "-baijiahao" 正则
				let reg1 = /\s\-\S+/;
				//移除如 "site:baidu" 正则
				let reg2 = /\ssite\:\S+/;
				let URL = "https://www.baidu.com/s?ie=utf-8&wd=";
				let content = document.getElementById("kw").value.trim();
				content = content.replace(reg1, "").trim();
				content = content.replace(reg2, "").trim();
				location.href =
					URL + encodeURIComponent(content) + " " + filterName;
			}
			/**
			 * 选择全部
			 */
			selectAllContent() {
				let input = document.getElementById("kw");
				input.focus();
				input.selectionStart = 0;
				input.selectionEnd = input.value.length;
			}
			/**
			 * 绑定快捷键
			 */
			bindKeys() {
				let defaultTarget = this.target;
				document.onkeyup = event => {
					let e = event || window.event;
					if (e.target === defaultTarget || e.target === document) {
						let keyCode = e.keyCode || e.which || e.charCode;
						//Ctrl + Enter 全选中
						if (keyCode == this.KEY_ENTER && e.ctrlKey) {
							this.selectAllContent();
							return;
						}
						//谷歌搜索
						if (keyCode ===
							this.KEY_GOOGLE.toUpperCase().charCodeAt() &&
							!e.altKey &&
							!e.shiftKey &&
							!e.ctrlKey &&
							!e.metaKey) {
							this.Google.googleSearch();
							return;
						}
						//过滤搜索
						for (let {
								name,
								value
							} of this.filters) {
							if (keyCode === name.toUpperCase().charCodeAt() &&
								!e.altKey &&
								!e.shiftKey &&
								!e.ctrlKey &&
								!e.metaKey) {
								this.filterSearch(value);
								return;
							}
						}
					}
					e.stopPropagation();
				};
			}
			/**
			 * 重置
			 */
			reset() {
				this.target = document.getElementsByTagName("body")[0] || null;
			}
			/**
			 * 初始化
			 */
			init() {
				try {
					this.reset();
					this.bindKeys();
				} catch (error) {}
			}
			/**
			 * 执行
			 */
			execute() {
				Baidu.ready = () => {
					this.init();
				};
			}
		}
		/**
		 * Base地址重置
		 */
		class BaseURL {
			run() {
				location.href = location.href.replace("https://www.baidu.com/#", "https://www.baidu.com/s?");
			}
		}

		/**

		*/
		class Fixed extends Base {
			removeWrapperNew() {
				let wrapper = document.getElementById("wrapper");
				if (wrapper != null) {
					wrapper.classList.remove("wrapper_new");
					return true;
				}
				return false;
			}

			removeUserIcon() {
				let paras = document.getElementsByClassName("s-top-img-wrapper");
				if (paras != null && paras.length > 0) {
					for (let i = 0; i < paras.length; i++) {
						if (paras[i] != null)
							paras[i].parentNode.removeChild(paras[i]);
					}
					return true;
				}
				return false;
			}

			start() {
				this.removeWrapperNew();
				this.removeUserIcon();
			}

			execute() {
				//移除新首页类名,防止排版错误
				let countRemoveWrapperNew = 0;
				let timerRemoveWrapperNew = setInterval(() => {
					let isSuccess = this.removeWrapperNew();
					if (isSuccess || countRemoveWrapperNew++ > 20) {
						clearInterval(timerRemoveWrapperNew);
					}
				}, 0)

				//移除用户头像,防止排版错误
				let countRemoveUserIcon = 0;
				let timerRemoveUserIcon = setInterval(() => {
					let isSuccess = this.removeUserIcon();
					if (isSuccess || countRemoveUserIcon++ > 20) {
						clearInterval(timerRemoveUserIcon);
					}
				}, 0)

				//再次执行
				Baidu.ready = () => {
					this.start();
				};

			}
		}

		/**
		 *  首页
		 */
		class PageIndex {
			run() {
				//组合模式
				let command = new Commond();
				command.add(new ImportIndexStyle());
				command.add(new ReplaceSearch());
				command.execute();
			}
		}
		/**
		 *  搜索结果页
		 */
		class PageCommon {
			run() {
				/**
				 * 01 - 初始化执行
				 */
				let command = new Commond();
				command.add(new ImportCommonStyle());
				command.add(new FirstFilter());
				// command.add(new HideBaijiahao());
				command.add(new ReplaceSearchEvent());
				command.add(new CustomMenuButton());
				command.add(new MulPageLayout());
				command.add(new UseAutoLoadNextPage());
				 // command.add(new Redirect());
				command.add(new BackToTop());
				command.add(new Google());
				command.add(new ShortcutKeys());
				command.add(new Fixed())
				command.execute();
				/**
				 * 02 - 设置标志位
				 * 防止后期多次无用执行
				 */
				let avoidMulExecute = new AvoidMulExecute();
				//设置标志位
				Baidu.ready = () => {
					avoidMulExecute.setSign();
				};
				/**
				 * 03 - 监测 DOM
				 */
				//调用函数
				let mutationfunc = () => {
					//只执行一次
					if (!avoidMulExecute.hasSign()) {
						//设置标志位
						avoidMulExecute.setSign();
						//执行
						command.execute();
					}
				};
				//加载完成后 - 根据 DOM 变化重新执行函数( 防止Bash值改变时不触发脚本)
				window.onload = () => {
					let MutationObserver = window.MutationObserver ||
						window.WebKitMutationObserver ||
						window.MozMutationObserver;
					if (!!MutationObserver) {
						let observer = new MutationObserver(mutationfunc);
						let wrapper = document.querySelector("#wrapper");
						let observerConfig = {
							childList: true,
							subtree: true
							//"attributes": true,
							//"characterData":true,
							//"attributesFilter": ["class"],
						};
						//开始观察
						observer.observe(wrapper, observerConfig);
					} else {
						console.error("百度搜索-优化: 浏览器不兼容 MutationObserver 接口, 请升级浏览器版本");
					}
				};
			}
		}
		/**
		 * 简单工厂
		 */
		class Factory {
			/**
			 *
			 * @param url
			 */
			static create(url) {
				//BASE地址(BASE地址会导致样式跳转,需要重定向)
				const URL_BASE = "https://www.baidu.com/#";
				//普通页 01
				const URL_COMMON_01 = "https://www.baidu.com/s";
				//普通页 02
				const URL_COMMON_02 = "https://www.baidu.com/baidu";
				//首页
				const URL_INDEX = "https://www.baidu.com";
				//返回BASE
				if (url.startsWith(URL_BASE)) {
					return new BaseURL();
				}
				//返回结果页
				if (url.startsWith(URL_COMMON_01)) {
					return new PageCommon();
				}
				//返回结果页
				if (url.startsWith(URL_COMMON_02)) {
					return new PageCommon();
				}
				//返回首页
				if (url.startsWith(URL_INDEX)) {
					return new PageIndex();
				}
			}
		}
		/**
		 * 启动函数
		 */
		Baidu.start = () => {
			Factory.create(location.href).run();
		};
		//返回对象
		return Baidu;
	})(BaiduConfig);
	//启动
	try {
		Baidu.start();
	} catch (msg) {
		if (Configs.IS_DEBUG) {
			console.error(msg);
		}
	}
})();