您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Display a popup showing the character code(s) of the selected character(s) (max. 100 characters; configurable). This script is instended to be used as a bookmarklet using this URL: javascript:scc_ujs()
当前为
- // ==UserScript==
- // @name Show Character Codes
- // @namespace https://greasyfork.org/en/users/85671-jcunews
- // @version 1.0.1
- // @license AGPL v3
- // @description Display a popup showing the character code(s) of the selected character(s) (max. 100 characters; configurable). This script is instended to be used as a bookmarklet using this URL: javascript:scc_ujs()
- // @author jcunews
- // @match *://*/*
- // @grant none
- // ==/UserScript==
- window.scc_ujs = function(maxTextLength, wspaces, txt, ei, a, b, i, c, o, d, e) {
- //===== CONFIG START =====
- maxTextLength = 100;
- //===== CONFIG END =====
- function zerolead(s, l) {
- return ("0").repeat(l - s.length) + s;
- }
- function hex(n, h) {
- h = n.toString(16).toUpperCase();
- if (n <= 0xff) {
- return zerolead(h, 2);
- } else if (n <= 0xffff) {
- return zerolead(h, 4);
- } else return zerolead(h, 8);
- }
- if (!(txt = getSelection().toString()) || document.querySelector('div.showCharCode[id^="scc"]')) return;
- ei = "scc" + (new Date()).getTime();
- a = document.createElement("DIV");
- a.id = ei;
- a.className = "showCharCode"
- a.innerHTML = `
- <style>
- #${ei} * {
- opacity:1!important; visibility:visible!important;
- position:static!important; z-index:auto!important; left:auto!important; top:auto!important; right:auto!important; bottom:auto!important; float:none!important;
- margin:0!important; vertical-align:baseline!important;
- border:none!important; padding:0!important; width:auto!important; height:auto!important; overflow:visible!important;
- background:transparent!important; text-align:left!important; text-decoration:none!important; color:#000!important;
- font:normal normal normal 16pt/normal sans-serif!important; cursor:auto!important;
- }
- #${ei}, #${ei} .curtain {
- display:block!important; position:fixed!important; z-index:999999996!important; left:0!important; top:0!important; right:0!important; bottom:0!important;
- }
- #${ei} .curtain {
- opacity:.3!important; z-index:999999997!important; background:#000!important; cursor:pointer!important;
- }
- #${ei} .dialog {
- display:block!important; z-index:999999998!important; visibility:visible!important;
- position:absolute!important;
- padding:10px 10px 0 10px!important; border:5px solid #55b!important; border-radius:10px!important;
- max-height:90%!important; overflow-y:scroll!important; background:#fff!important;
- }
- #${ei} label {
- margin-right:2ex!important; cursor:pointer!important;
- }
- #${ei} label:last-child {
- margin-right:0!important;
- }
- #${ei} table {
- margin:10px 0!important;
- }
- #${ei} th {
- padding:0 1ex!important; background:#000!important; text-align:center!important; color:#fff!important;
- }
- #${ei} table.no1Bytes .bytes1 {
- display:none!important;
- }
- #${ei} table.no2Bytes .bytes2 {
- display:none!important;
- }
- #${ei} table.no4Bytes .bytes4 {
- display:none!important;
- }
- #${ei} table.noWSpaces .wspace {
- display:none!important;
- }
- #${ei} td {
- padding:0 1ex!important; background:#ddd!important;
- }
- #${ei} td:first-child {
- position:relative!important; text-align:center!important;
- }
- #${ei} td:first-child:hover:after {
- position:absolute!important; z-index:999999999!important; top:-.54em!important;
- border: 2px solid #007; border-radius:10px!important; padding:0 .11em!important; background:#fff!important;
- font-size:80px; content:attr(char);
- }
- #${ei} tr:nth-child(2)~tr td:first-child:hover:after {
- top:-.89em!important;
- }
- #${ei} td+td {
- text-align:right!important;
- }
- </style>
- <div class="curtain"></div>
- <div class="dialog">
- <div style="white-space:nowrap!important">
- <label for="${ei}1bytes"><input id="${ei}1bytes" type="checkbox" checked /> 1-Byte</label>
- <label for="${ei}2bytes"><input id="${ei}2bytes" type="checkbox" checked /> 2-Bytes</label>
- <label for="${ei}4bytes"><input id="${ei}4bytes" type="checkbox" checked /> 4-Bytes</label>
- <label for="${ei}wspaces"><input id="${ei}wspaces" type="checkbox" /> White-Spaces</label>
- </div>
- <table class="noWSpaces">
- <tr><th>Char</th><th>Hex</th><th>Dec</th><th>UTF-16 Codes</th><th>UTF-8 Codes</th></tr>
- </table>
- </div>
- `;
- a.children[1].addEventListener("click", function() {
- a.remove();
- document.documentElement.style.overflow = "";
- }, true);
- b = a.lastElementChild.lastElementChild;
- a.querySelector("#" + ei + "1bytes").addEventListener("click", function() {
- b.classList.toggle("no1Bytes");
- }, true);
- a.querySelector("#" + ei + "2bytes").addEventListener("click", function() {
- b.classList.toggle("no2Bytes");
- }, true);
- a.querySelector("#" + ei + "4bytes").addEventListener("click", function() {
- b.classList.toggle("no4Bytes");
- }, true);
- a.querySelector("#" + ei + "wspaces").addEventListener("click", function() {
- b.classList.toggle("noWSpaces");
- }, true);
- wspaces = "\t\n\r \u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000\ufeff";
- i = 0;
- while (i < txt.length) {
- d = txt.codePointAt(i);
- (e = (o = b.insertRow()).insertCell()).textContent = c = String.fromCodePoint(d);
- e.setAttribute("char", c);
- if (c.length === 1) {
- o.className = ((c.charCodeAt(0) > 0xff) ? "bytes2" : "bytes1") + (wspaces.indexOf(c) >= 0 ? " wspace" : "");
- } else o.className = "bytes4";
- o.insertCell().textContent = "0x" + hex(d);
- o.insertCell().textContent = d;
- o.insertCell().textContent = c.split("").reduce(
- function(p, c) {
- p.push(hex(c.charCodeAt(0)));
- return p;
- }, []
- ).join(",");
- o.insertCell().textContent = unescape(encodeURIComponent(c)).split("").map(
- function(w) {
- return hex(w.charCodeAt(0));
- }
- ).join(",");
- i += c.length;
- }
- document.body.appendChild(a);
- c = b.parentNode;
- c.style.cssText =
- "left:" + Math.floor((innerWidth - c.offsetWidth) / 2) + "px!important;" +
- "top:" + Math.floor((innerHeight - c.offsetHeight) / 2) + "px!important";
- document.documentElement.style.overflow = "hidden";
- };