您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
the OKX_exchange
// ==UserScript== // @name OKX_exchange // @namespace [email protected] // @version 0.1 // @description the OKX_exchange // @author [email protected] // @match *://www.okx.com // @match *://*.okx.com // @license AGPL License // @grant GM_download // @grant GM_openInTab // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant unsafeWindow // @grant GM_setClipboard // @grant GM_getResourceURL // @grant GM_getResourceText // @grant GM_info // @grant GM_registerMenuCommand // @grant GM_cookie // ==/UserScript== (function () { 'use strict'; if (typeof window != 'undefined' && !window.$) { window.$ = { get: function (URL, queryJSON, callback) { let xhr; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { callback(xhr.responseText); } else { callback(new Error("AJAX GET did not find the requested file"), undefined); } } } let querystring = this._queryjson2querystring(queryJSON); let joiner if (!URL.includes('?')) { joiner = "?" } else { joiner = "&" } if(querystring){ querystring = joiner + querystring } xhr.open("get", URL + querystring, true); xhr.send(null); }, post: function (URL, queryJSON, callback) { let xhr; if (window.XMLHttpRequest) { xhr = new window.XMLHttpRequest(); } else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { callback(xhr.responseText); } else { callback(new Error("AJAX POST did not find the requested file"), undefined); } } } let querystring = this._queryjson2querystring(queryJSON); xhr.open("post", URL, true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(querystring); }, _queryjson2querystring: function (json) { var arr = []; for (var k in json) { arr.push(k + "=" + encodeURIComponent(json[k])); } return arr.join("&"); } } } class MyPluginClass { base_remote_url = "https://api.12gm.com/" constructor() { } get(method, request_data) { let url = this.remote_url(method) return new Promise((resolve, reject) => { $.get(url, request_data, (data) => { data = this.to_json(data) resolve(data) }) }) } post(method, data) { let url = this.remote_url(method) return new Promise((resolve, reject) => { $.post(url, data, (data) => { data = this.to_json(data) resolve(data) }) }) } to_json(value){ try{ value = JSON.parse(value) }catch(e){ console.log(`to_json ${e}`) console.log(`value ${value}`) value = null } return value } get_button_html() { let html = ` <style> .add_wordtodocument{ display: block; z-index: 1050;position: fixed; right: 7px; top: 130px; height: 55px; font-weight: 900; background: -webkit-linear-gradient(45deg, #70f7fe, #fbd7c6, #fdefac, #bfb5dd, #bed5f5); -moz-linear-gradient(45deg, #70f7fe, #fbd7c6, #fdefac, #bfb5dd, #bed5f5); -ms-linear-gradient(45deg, #70f7fe, #fbd7c6, #fdefac, #bfb5dd, #bed5f5); color: transparent; /*设置字体颜色透明*/ /*背景裁剪为文本形式*/ animation: ran 10s linear infinite; /*动态10s展示*/ border-radius: 25px; padding: 0 10px; } .add_worddiv{ float: left; width: 200px; display:none; } .add_wordinput{ width: 200px; height: 30px; line-height: 30px; border-radius: 10px; color: #333333; } .add_worddivbutton{ height: 60px; width: 60px; position: fixed; right: 25px; bottom: 25px; background: #20a53a; border-radius: 2px; /* box-shadow: 0 0 8px 1px #aeaeae; */ text-align: center; line-height: 60px; cursor: pointer; z-index: 99999996; border-radius: 50%; color: #fff; background-image: initial; background-color: rgb(26, 132, 46); box-shadow: rgb(70 76 78) 0px 0px 8px 1px; color: rgb(232, 230, 227); } .add_worddiv ul{ margin: 0; float: left; padding: 0px; } .add_worddiv ul li{ float: left; } .add_worddiv ul li .group_span{ color: #000; font-size: 12px; line-height: 20px; /* height: 20px; */ padding-left: 5px; } .add_worddiv ul .grouptitle{ height: 14px; } .add_wordbutton{ width: 100%; float: left; font-weight: bold; text-align: center; color: #fff; display: inline-block; vertical-align: middle; font-size: 12px; text-align: center; line-height: 15px; padding-top: 15px; height: 45px; } .worddiv_iframediv{ display: block; width: 100%; float: left; font-weight: bold; font-size: 30px; line-height: 55px; text-align: center; color: indianred; } .worddiv_iframediv{ display: none; width: 100%; float: left; font-weight: bold; font-size: 30px; line-height: 55px; text-align: center; color: indianred; } .worddiv_iframe{ display: block; width: 100%; height: 800px; } .tip { position: relative; margin-left: 20px; margin-top: 20px; width: 200px; background: #8b1a02; padding: 10px; position: fixed; top: 0; left: 40%; /*设置圆角*/ z-index: 2100000000; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; display:none; } /*提示框-左三角*/ .tip-trangle-left { position: absolute; bottom: 15px; left: -10px; width: 0; height: 0; border-top: 15px solid transparent; border-bottom: 15px solid transparent; border-right: 15px solid #8b1a02; } /*提示框-右三角*/ .tip-trangle-right { position: absolute; top: 15px; right: -10px; width: 0; height: 0; border-top: 15px solid transparent; border-bottom: 15px solid transparent; border-left: 15px solid #8b1a02; } /*提示框-上三角*/ .tip-trangle-top { position: absolute; top: -10px; left: 20px; width: 0; height: 0; border-left: 15px solid transparent; border-right: 15px solid transparent; border-bottom: 15px solid #8b1a02; } /*提示框-下三角*/ .tip-trangle-bottom { position: absolute; bottom: -10px; left: 20px; width: 0; height: 0; border-left: 15px solid transparent; border-right: 15px solid transparent; border-top: 15px solid #8b1a02; } .badge_chat-number{ position: fixed; right: 7px; z-index: 99999999; bottom: 70px; padding: 2px 7px; font-size: 11px; background-color: rgb(170, 3, 3); height: 12px; line-height: 12px; border-radius: 10px; } </style> <div class="tip" style="background-color: #8b1a02;" id="WordToNoteBookButton"> <div class="tip-trangle-bottom"></div> 单词添加成功提示:<br/> <span></span> </div> <div class="add_worddivbutton"> <span class="badge_chat-number">今日<font class='notebook_count'>0</font>个新词</span> <a href="javascript:void(0)" id="my_bing_putwords_botton" class="add_wordbutton"> <span>本页<br><font class='articleword_count'>-</font><br>单词</span> </a> </div> ` return html } init() { if(this.exclude()){ return } this.set_html() this.listing_buttom() } info(message){ let id = "#WordToNoteBookButton" let note = document.querySelector(id) if(note){ note.querySelector('span').innerHTML = message note.style.display = 'block' setTimeout(() => { note.style.display = 'none' },1500) } } is_mobile_browser() { let mobile_match = navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i ) if (mobile_match) { this.get_trans_word_index = 2 this.mobile_browser = 1 }else{ this.get_trans_word_index = 3 this.mobile_browser = 0 } } exclude(){ let exclude_hosts = ["12gm.com"] let hostname = window.location.hostname hostname = hostname.split(".").slice(-2).join('.').toLowerCase() let is_frame = (window.self === window.top) == false if(exclude_hosts.indexOf(hostname) != -1 || is_frame){ return true }else{ return false } } set_html() { let up_html = this.get_button_html() document.querySelector('body').insertAdjacentHTML("afterBegin", up_html); setTimeout(()=>{ let words = this.get_documentwords() document.querySelector('.articleword_count').innerHTML = words.length+'个' let notebook_count = this.local_storage('notebook_count') if(!notebook_count){ this.get('notebook_count').then((data)=>{ notebook_count = data.data[0] this.set_notebook_count(notebook_count) }) }else{ this.set_notebook_count(notebook_count) } },1000) } set_notebook_count(notebook_count){ this.local_storage('notebook_count',notebook_count) document.querySelector('.notebook_count').innerHTML = notebook_count } listin_documentalive() { } remove(selector) { let ele = document.querySelector(selector) if (ele) { ele.remove() } } get_documentwords() { let words = [...( new Set( document.documentElement.textContent.split(/[^a-zA-Z]/) .join(" ").split(/(?<=[a-z])\B(?=[A-Z])/) .join(" ").split(/\s+/) ) )] let is_notword = /^[a-z]+[A-Z]$/ let new_words = [] let filter = [] for(let word of words){ if(is_notword.test(word) || word.length < 3){ filter.push(word) }else{ new_words.push(word) } } return new_words } split_html(html){ html = html.replaceAll(/<.+?>/g, '') return html } put_to_remote_local_vocabulary(callback) { let doc = document.documentElement.outerHTML; if (doc) { let url = this.remote_url('put_translate_words') $.post(url, { "doc": doc, "t_group": location.hostname }, (data) => { if (callback) { callback(data) } }) } } local_storage(key,value){ if(value){ localStorage.setItem(key,value) }else{ return localStorage.getItem(key) } } set_groupname() { this.local_storage("group_name",window.location.hostname) } get_groupname() { let group_name = this.local_storage("group_name") if(!group_name){ group_name = this.get_defaultgroupname() } return group_name } get_defaultgroupname() { return window.location.hostname } remote_url(method) { this.base_remote_url = this.base_remote_url.replace(/\/+$/,'') let url = `${this.base_remote_url}/api?method=${method}&key=9LrQN0~14,dSmoO^&module=com_translate`; return url } translate_wordtotran(){ let trans_target = document.querySelector("#outlined-multiline-static") setInterval(function(){ let text = window.getSelection().toString() let trans_target_text = trans_target.value if(text && text != trans_target_text){ trans_target.value = trans_target_text } },500) } //给添加的元素添加监听事件 listing(selector,event,callback){ let ele = document.querySelector(selector) if(ele){ ele.addEventListener(event,()=>{ callback() }) } } get_saladict_panel(selector){ let saladict_panel = document.querySelector('#saladict-dictpanel-root .saladict-panel') if(!saladict_panel){ console.log('not found #saladict-dictpanel-root .saladict-panel') return null } let shadow_root = saladict_panel.shadowRoot if(!shadow_root){ console.log('not found saladict_panel > shadowRoot') return null } //document.querySelector('#saladict-dictpanel-root .saladict-panel').shadowRoot.querySelectorAll('.dictItem-BodyMesure > div:last-child') let shadow_roots = shadow_root.querySelectorAll('.dictItem-BodyMesure > div:last-child') if(!shadow_roots.length){ console.log('not found .dictItem-BodyMesure > div:last-child') return null } for(let i = 0;i<shadow_roots.length;i++){ let shadowitem = shadow_roots[i] if(shadowitem.shadowRoot){ shadow_root = shadowitem.shadowRoot if(selector){ shadow_root = shadow_root.querySelector(selector) if(shadow_root){ break } } } } if(!shadow_root){ console.log('not found .dictItem > shadow_root') return null } return shadow_root } auto_play_voice(){ setInterval(() => { }, 500); } play_bingvoice(){ //document.querySelector('#saladict-dictpanel-root .saladict-panel').shadowRoot.querySelector('.dictItem-BodyMesure > div:last-child').shadowRoot.querySelector('.saladict-Speaker') let us_voice = this.get_saladict_panel('.saladict-Speaker') if(!us_voice){ console.log('not found saladict-Speaker') return } let css_class = us_voice.getAttribute('class') if (css_class.indexOf('isActive') == -1){ us_voice.click() } } put_word(e){ let those = window.MyPlugin if(e.key == ',') { let dictBing_Title = those.get_saladict_panel('.dictBing-Title') if(!dictBing_Title) { dictBing_Title = those.get_saladict_panel('.MachineTrans-lang-en span') } if(!dictBing_Title) { console.log('not found dictBing-Title') return } let word = dictBing_Title.innerHTML if(word){ console.log(`add ${word} to notebook.`) those.get("put_word",{ group:"eudic默认生词本", word, reference_url:window.location.href }).then((data)=>{ let notebook_count = data.data[0].notebook_count those.set_notebook_count(notebook_count) those.info(`${word}添加到生词本.`) }) } }else if(e.key == '.') { those.play_bingvoice() } } //给添加的元素添加监听事件 listing_buttom() { //this.translate_wordtotran() this.listing('#my_bing_putwords_botton','click',()=>{ let group_name = this.get_defaultgroupname() this.set_groupname(group_name) let words = this.get_documentwords() if(confirm(`是否提交单词组'${group_name}'(${words.length}个词)到词典`)){ this.post("put_group",{ doc: words.join(" "), group_name: group_name, incremental:true }).then((result)=>{ console.log(result) }) } }) window.onkeydown = this.put_word } } window.MyPlugin = new MyPluginClass() window.MyPlugin.init() })();