您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
获取网站浏览历史
当前为
// ==UserScript== // @name Hi-history // @namespace http://tampermonkey.net/ // @version 1.45 // @description 获取网站浏览历史 // @author chillybird // @match http://*/* // @match https://*/* // @grant unsafeWindow // @run-at document-start // ==/UserScript== addEventListener('DOMContentLoaded', function () { (function () { 'use strict'; if (self.frameElement && self.frameElement.tagName == "IFRAME") { return; }; if (window.frames.length != parent.frames.length) { return; }; let initialX; let initialY; let xOffset = 0; let yOffset = 0; let pos_x; let pos_y; var currentDomain = new URL(window.location.href).hostname; document.addEventListener("click", function (e) { var target = e.target; while (target && !target.href) { target = target.parentElement; } if (target) { e.preventDefault(); var linkDomain = new URL(target.href).hostname; if (linkDomain) { if (linkDomain === currentDomain) { window.location = target.href; } else { window.open(target.href); } } } }); var tab_flag = true; //是否已经弹出面板 var last_mark = 0;//当前url在列表中的位置 var i = NaN; document.onkeydown = function (event) { var e = event || window.event || arguments.callee.caller.arguments[0]; if (e.keyCode == 66 && e.altKey) { if (tab_flag) { showMarkbook(); } else { document.getElementsByClassName("exit_his")[0].click(); } tab_flag = !tab_flag; } if (e.keyCode == 66 && e.ctrlKey) {//ctrl+B复制当前网址 document.getElementsByClassName('s_item_bnt')[last_mark - 1].children[0].click(); } } //创建样式 var dom = document.createElement('style'), dom_body = document.getElementsByTagName('body')[0]; dom.innerHTML = "#markBook #slider {margin: 0px 30px;width: 160px;background-size: 98% 3px;background: linear-gradient(to left, rgb(249, 118, 118) 0%, rgb(255, 255, 255) 100%);outline: none;-webkit-appearance: none;height: 3px;}#markBook input[type='range']::-webkit-slider-thumb {width: 10px;height: 10px;border-radius: 50%;background-color: rgb(249, 118, 118);box-shadow: 0 0 2px rgba(0, 0, 0, 0.3),0 3px 5px rgba(0, 0, 0, 0.2);cursor: pointer;-webkit-appearance: none;border: 0;}#markBook a:link{color:#0366d6;}#markBook{box-sizing:border-box;box-shadow:1px 1px 2px 1px #0000005c;position:fixed;z-index:9999999999;border-radius:5px;background-color:cornsilk;box-sizing:border-box;width:220px;}.bookNav{ user-select:none;background-color:#fbfbfb !important; border-bottom:1px solid #a0a0a04a !important;overflow:hidden;/*border-radius:5px;*/}.del_mark{position:absolute;bottom:0px;left:0px;}.bookNav,.del_mark{width:100%;height:28px;line-height:28px;/*position:absolute;bottom:0px;*/background-color:lightgray;font-size:16px;color:#A9A9A9;/*border:1px solid #000000;*/}.hismark_history{width:70px;line-height:28px;box-sizing:border-box;display:inline;height:28px;text-align:center;font-size:14px;color:#000;cursor:pointer;}.exit_his{width:100%;color:#fca273;height:28px;line-height:28px;text-align:center;box-sizing:border-box;cursor:pointer;}.exit_his:hover{background-color:#808080a3;color:rgb(239, 233, 232);}.history_notice{height:280px;width:190px;line-height:40px;}.history_tab{padding:10px 0px 0px 10px;display:block;box-sizing:border-box;padding-bottom:5px;width:250px;}.hismark_del{float:right;width:80px;height:28px;line-height:28px;font-size:12px;text-align:center;color:#000;cursor:pointer}.hismark_del:hover{color:red;}.s_item>a:hover {color:#428bca !important;}.s_item{width:190px;height:40px;position:relative;text-align:left;border-bottom:2px dashed #BEBEBE;padding-left:5px;line-height:40px;}.s_item a{text-decoration:none;font-size:14px;width:185px;position: absolute; top: 50%; transform: translate(0, -50%);display:inline-block;float:left;overflow:hidden; white-space:nowrap;text-overflow:ellipsis;}.m_hismark{overflow:hidden;width:220px;}.s_item_bnt{position:absolute;top:10px; right:0px;font-size:14px;float:right;width:45px;height:20px;cursor:pointer;display:none;color:rgb(250, 128, 114);text-align:center;box-sizing:border-box;}.i_item_bnt{width:100%;height:20px;line-height:20px;box-sizing:border-box;float:left;}.i_item_bnt:last-child{border-left:2px solid rgb(250, 128, 114);}.his_alert{color:#42b983;font-size:18px;font-weight:bold;position:fixed;z-index:144469;animation:mymove 1200ms linear; -webkit-animation:mymove 1200ms linear;}@keyframes mymove{from {top:100px;left:50%;opacity:1;transform:translateX(-50%);}to {top:60px;left:50%;opacity:0;transform:translateX(-50%);display:none;}}@-webkit-keyframes mymove{from {top:100px;left:50%;opacity:1;transform:translateX(-50%);}to {top:60px;left:50%;opacity:0;transform:translateX(-50%);display:none;}}"; dom_body.appendChild(dom); //创建标签 dom = document.createElement('div'); dom.id = "markBook"; var str = "<div class='bookNav'><div class='exit_his'>Hi-history</div></div><div class='m_hismark'>";// color:#fca273; background-color:#fbfbfb; //获取浏览记录 if (!sessionStorage) { str += "<div class='history_notice'>浏览器不支持sessionStorage!</div>"; } else { // console.log('first record!'); if (his_item_length() < 1) { //建立第一条记录 sessionStorage.setItem('url_1', location.href); sessionStorage.setItem('url_1_name', (document.getElementsByTagName('title')[0]).innerHTML.split(' ').join('-')); str += "<div class='history_tab'><div class='s_item'><a title=" + sessionStorage.getItem('url_' + i + '_name') + " href=" + sessionStorage.getItem('url_1') + ">1:" + sessionStorage.getItem('url_1_name') + "</a><div class='s_item_bnt'><div class='i_item_bnt'rgb(250, 128, 114)>复制</div></div><textarea class='s_copy' style='height:0px;width:0px;opacity:0;margin:0px;padding:0px;'>content</textarea></div></div>"; } else { // console.log('continue!'); history_tab1(); } } //创建按钮 var slider_val = sessionStorage.getItem("sliderVal"); console.log("opacity", slider_val); if (!slider_val) { slider_val = 1; } str += "</div><input type='range' min='0' max='1' step='0.01' id='slider' value='" + slider_val + "'><a style='width:220px;height:40px;line-height:40px;display:block;color:#8e959a;font-size:14px;text-align:center;overflow:hidden;border-bottom:none;white-space:pre-wrap; text-overflow:ellipsis;' href=" + location.href.slice(0, location.href.indexOf(location.host)) + location.host + ">" + location.href.slice(0, location.href.indexOf(location.host)) + location.host + "</a></div>"; dom.innerHTML = str; dom_body.appendChild(dom); var markBook = document.getElementById('markBook'); var dragPoint = document.getElementsByClassName('bookNav')[0]; var exit_bnt = document.getElementsByClassName('exit_his')[0]; markBook.style.opacity = slider_val; markBook.style.userSelect = "none"; hismark_init(); // 透明度滑动条 var slider = document.getElementById("slider"); slider.oninput = function () { markBook.style.opacity = this.value; sessionStorage.setItem("sliderVal", this.value); } exit_bnt.onclick = function () { markBook.style.left = "-220px"; markBook.style.top = "0px"; markBook.style.transform = "none"; xOffset = 0; yOffset = 0; sessionStorage.setItem("elementX", 0); sessionStorage.setItem("elementY", 0); }; dragPoint.addEventListener("mousedown", (event) => { //document.body.style.userSelect = "none"; //markBook.style.transition = "none"; initialX = event.clientX - xOffset; initialY = event.clientY - yOffset; console.log("on", initialX, initialY); }); dragPoint.addEventListener("mouseup", () => { // 恢复动画 //element.style.userSelect = "text"; //markBook.style.transition = "all 400ms"; console.log("up"); }); // 拖放元素 dragPoint.addEventListener("dragstart", (event) => { // 设置元素的透明度(可选) markBook.style.opacity = "0.5"; console.log("dragstart"); }); dragPoint.addEventListener("dragend", (event) => { // 恢复元素的透明度(可选 markBook.style.opacity = slider.getAttribute("value"); var left_pos = parseInt(extract_numder(markBook.style.left)[0]); var top_pos = parseInt(extract_numder(markBook.style.top)[0]); if (markBook.style.transform) { var trans_pos = extract_numder(markBook.style.transform); left_pos = left_pos + parseInt(trans_pos[1]); top_pos = top_pos + parseInt(trans_pos[2]); } if (left_pos < 0 && top_pos < 0) { console.log("dragover1", left_pos, top_pos, xOffset, yOffset); xOffset = xOffset - left_pos; yOffset = yOffset - top_pos; left_pos = 0; top_pos = 0; } if (left_pos < 0) { console.log("dragover2", left_pos, top_pos, xOffset, yOffset); xOffset = xOffset - left_pos; left_pos = 0; } if (top_pos < 0) { console.log("dragover3", left_pos, top_pos, xOffset, yOffset); yOffset = yOffset - top_pos; top_pos = 0; } setTranslate(xOffset, yOffset, markBook); sessionStorage.setItem("elementX", left_pos); sessionStorage.setItem("elementY", top_pos); console.log("save", left_pos, top_pos); console.log("dragend", xOffset, yOffset); }); dragPoint.addEventListener("dragover", (event) => { event.preventDefault(); xOffset = event.clientX - initialX; yOffset = event.clientY - initialY; setTranslate(xOffset, yOffset, markBook); // console.log("dragover", event.clientX, event.clientY, initialX, initialY, xOffset, yOffset); }); add_item_bnt(); function showMarkbook() { markBook.style.left = "0px"; var W_height = document.documentElement.clientHeight; var scroll_height = document.documentElement.clientHeight - 90; var object_height = markBook.clientHeight; var scroll_tab = document.getElementsByClassName("history_tab"); var m_hismark = document.getElementsByClassName("m_hismark")[0]; if ((object_height + 40) > W_height) { scroll_tab[0].style.height = scroll_height + "px"; scroll_tab[0].style.overflow = "scroll"; scroll_tab[0].style.overflowX = "hidden"; m_hismark.style.height = scroll_height + "px"; } }; // 设置元素的位置 function setTranslate(xPos, yPos, el) { el.style.transform = "translate3d(" + xPos + "px, " + yPos + "px, 0)"; } function extract_numder(str) { var numbers = str.match(/-?\d+/g); return numbers; } function copy_alert(text) { var dom = document.createElement('div'), dom_body = document.getElementsByTagName('body')[0]; // 判断网址是否复制成功 dom.classList.add('his_alert'); dom.innerHTML = text; dom_body.appendChild(dom); } function copyText(text) { var textarea = document.createElement("textarea"); // 创建一个文本域元素 textarea.value = text; // 将文本内容放入文本域 document.body.appendChild(textarea); // 将文本域添加到网页中 textarea.select(); // 选中文本域中的文本 var success = document.execCommand("copy"); // 执行复制命令 document.body.removeChild(textarea); // 将文本域从网页中移除 if (success) { copy_alert("复制成功"); } else { copy_alert("复制失败"); } } function hismark_init() { if (top != window) { console.log("Not a top window!"); return; } // 初始化位置 pos_x = sessionStorage.getItem("elementX") | 0; pos_y = sessionStorage.getItem("elementY") | 0; markBook = document.getElementById('markBook'); if (pos_x != 0 || pos_y != 0) { markBook.style.left = `${pos_x}px`; markBook.style.top = `${pos_y}px`; } else { markBook.style.left = "-220px"; markBook.style.top = "0px"; } //markBook.style.transition = "all 400ms"; console.log("initail pos:", pos_x, pos_y); //setTranslate(pos_x, pos_y, document.getElementById('markBook')); } function history_tab1() { str += "<div class='history_tab'>"; var url_name = 'url_' + (his_item_length() + 1); if (find_history(window.location.href)) { sessionStorage.setItem(url_name, window.location.href); sessionStorage.setItem(url_name + '_name', (document.getElementsByTagName('title')[0]).innerHTML.split(' ').join('-')); } for (var i = 1; i <= his_item_length(); i++) { if (sessionStorage.getItem('url_' + i) !== null) { if (sessionStorage.getItem('url_' + i + '_name') === null) { sessionStorage.setItem('url_' + i + '_name', 'note' + i); } str += "<div class='s_item'><a title=" + sessionStorage.getItem('url_' + i + '_name') + " href=" + sessionStorage.getItem('url_' + i) + ">" + i + ":" + sessionStorage.getItem('url_' + i + '_name') + "</a><div class='s_item_bnt'><div class='i_item_bnt'rgb(250, 128, 114)>复制</div></div><textarea class='s_copy' style='height:0px;width:0px;opacity:0;margin:0px;padding:0px;'>content</textarea></div>"; } } str += "</div>"; } function extractBaseUrl(url) { // 使用URL对象来解析给定的URL const parsedUrl = new URL(url); // 返回不包含查询参数的基础URL return `${parsedUrl.origin}${parsedUrl.pathname}`; } function find_history(his_url) { var baseUrl = extractBaseUrl(his_url); for (var i = 1; ; i++) { var storedUrl = sessionStorage.getItem('url_' + i); if (!storedUrl) break; if (extractBaseUrl(storedUrl) === baseUrl) return false; } return true; } function his_item_length() { var len = 0; for (var i = 1; i <= sessionStorage.length; i++) { if (sessionStorage.getItem('url_' + i) !== null) len = len + 1; } return len; } function his_mark(his_url, last_mark) { var historyTab = document.getElementsByClassName("history_tab")[0].children; var his_index = null; for (var i = 1; i <= sessionStorage.length; i++) { var storedUrl = sessionStorage.getItem('url_' + i); if (extractBaseUrl(storedUrl) === his_url) { his_index = i; break; } } if (last_mark !== 0 && last_mark !== his_index && historyTab[last_mark - 1]) { historyTab[last_mark - 1].style.borderBottom = "2px dashed #BEBEBE"; } if (his_index !== null && historyTab[his_index - 1]) { historyTab[his_index - 1].style.borderBottom = "2px solid #FA8072"; } return his_index; } // 检查url是否发生改变,使用框架时,嵌套路由得改变,不引起页面得刷新 var win_url = location.href; setInterval(function () { if (win_url !== location.href) { var url_name = 'url_' + (his_item_length() + 1); if (find_history(location.href)) { sessionStorage.setItem(url_name, window.location.href); sessionStorage.setItem(url_name + '_name', (document.getElementsByTagName('title')[0]).innerHTML); var ele = document.createElement('div'); ele.className = "s_item"; ele.innerHTML = "<a href=" + sessionStorage.getItem(url_name) + ">" + (his_item_length()) + ":" + sessionStorage.getItem(url_name + '_name') + "</a><div class='s_item_bnt'><div class='i_item_bnt'rgb(250, 128, 114)>复制</div></div><textarea class='s_copy' style='height:0px;width:0px;opacity:0;margin:0px;padding:0px;'>content</textarea>"; document.getElementsByClassName("history_tab")[0].appendChild(ele); add_item_bnt(); } win_url = location.href; } his_mark(extractBaseUrl(location.href)); }, 3000); setInterval(function() { window.addEventListener('mousemove', function(event) { var mouseX = event.clientX; var mouseY = event.clientY; if(mouseX < 3 && mouseY < markBook.clientHeight) { console.log("edge " + markBook.clientHeight); showMarkbook(); } else { // 输出鼠标的实时位置 console.log("Mouse position: X = " + mouseX + ", Y = " + mouseY); } }); }, 500); function add_item_bnt() { //删除与复制按钮 var s_item = document.getElementsByClassName('s_item'); var s_item_bnt = document.getElementsByClassName('s_item_bnt'); var s_copy = document.getElementsByClassName('s_copy'); for (var i = 0; i < s_item.length; i++) { (function (i) { s_item[i].onmouseover = function () { s_item_bnt[i].style.display = "block"; s_item[i].children[0].style.width = 140 + 'px'; }; s_item[i].onmouseout = function () { s_item_bnt[i].style.display = "none"; s_item[i].children[0].style.width = 185 + 'px'; }; s_item_bnt[i].children[0].onclick = function () { copyText("[" + sessionStorage.getItem('url_' + (i + 1) + '_name') + "](" + sessionStorage.getItem('url_' + (i + 1)) + ")"); }; })(i); } } })(); }, false);