您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
un double clic dans le texte sauvegarde la position dans l'URL / Recharger la page la fait défiler sur la position
// ==UserScript== // @name Keul Bookmark // @version 1 // @grant none // @match *://*/* // @description un double clic dans le texte sauvegarde la position dans l'URL / Recharger la page la fait défiler sur la position // @namespace https://greasyfork.org/users/805853 // ==/UserScript== window.addEventListener("load", load_bookmark); window.addEventListener("dblclick", save_bookmark); function save_bookmark() { var userSelection = window.getSelection ? window.getSelection() : document.selection.createRange(); var nodePosition = 0; var nodeIterator = document.createNodeIterator(document.body,NodeFilter.SHOW_TEXT); while (currentNode = nodeIterator.nextNode()) { nodePosition++; if(currentNode==userSelection.anchorNode) { return window.location.hash = "#bookmark-" + nodePosition + "-" + userSelection.anchorOffset; } } } function load_bookmark() { var bookmark=window.location.hash.split("-") if(bookmark[0]!='#bookmark' || bookmark.length!=3) return; var nodePosition = 0; var nodeIterator = document.createNodeIterator(document.body,NodeFilter.SHOW_TEXT); while (currentNode = nodeIterator.nextNode()) { nodePosition++; if(nodePosition == bookmark[1]) { var backupNode = currentNode.cloneNode(true); var startText = document.createTextNode(currentNode.data.substring(0,bookmark[2])); var endText = document.createTextNode(currentNode.data.substring(bookmark[2],currentNode.data.length)); var bookmarkText = document.createElement("span") bookmarkText.setAttribute("style","height:0.7em;display:inline-block;border:2px solid red;"); var finalNode = document.createElement("span"); finalNode.appendChild(startText); finalNode.appendChild(bookmarkText); finalNode.appendChild(endText); currentNode.parentNode.replaceChild(finalNode,currentNode); bookmarkText.scrollIntoView({behavior: "smooth", block: "center", inline: "center"}); // currentNode.parentNode.replaceChild(backupNode, currentNode); // put old text back after scroll? return; } } }