您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
调用 opencc-rust-wasm 转换中文
当前为
- // ==UserScript==
- // @name opencc-rust
- // @namespace Forbidden Siren
- // @version 0.7.0
- // @description 调用 opencc-rust-wasm 转换中文
- // @include *
- // @match *://*
- // @grant GM_getResourceText
- // @grant GM_getResourceURL
- // @grant GM_registerMenuCommand
- // @run-at document-end
- //
- // @require https://greasyfork.org/scripts/413698-opencc-rust-wasm/code/opencc-rust-wasm.js?version=859508
- // @resource opencc_wasm https://cdn.jsdelivr.net/gh/polyproline/opencc-rust@main/opencc_gc.wasm
- // @resource HKVariants https://cdn.jsdelivr.net/npm/opencc-data/data/HKVariants.txt
- // @resource HKVariantsRev https://cdn.jsdelivr.net/npm/opencc-data/data/HKVariantsRev.txt
- // @resource HKVariantsRevPhrases https://cdn.jsdelivr.net/npm/opencc-data/data/HKVariantsRevPhrases.txt
- // @resource JPShinjitaiCharacters https://cdn.jsdelivr.net/npm/opencc-data/data/JPShinjitaiCharacters.txt
- // @resource JPShinjitaiPhrases https://cdn.jsdelivr.net/npm/opencc-data/data/JPShinjitaiPhrases.txt
- // @resource JPVariants https://cdn.jsdelivr.net/npm/opencc-data/data/JPVariants.txt
- // @resource JPVariantsRev https://cdn.jsdelivr.net/npm/opencc-data/data/JPVariantsRev.txt
- // @resource STCharacters https://cdn.jsdelivr.net/npm/opencc-data/data/STCharacters.txt
- // @resource STPhrases https://cdn.jsdelivr.net/npm/opencc-data/data/STPhrases.txt
- // @resource TSCharacters https://cdn.jsdelivr.net/npm/opencc-data/data/TSCharacters.txt
- // @resource TSPhrases https://cdn.jsdelivr.net/npm/opencc-data/data/TSPhrases.txt
- // @resource TWPhrasesIT https://cdn.jsdelivr.net/npm/opencc-data/data/TWPhrasesIT.txt
- // @resource TWPhrasesName https://cdn.jsdelivr.net/npm/opencc-data/data/TWPhrasesName.txt
- // @resource TWPhrasesOther https://cdn.jsdelivr.net/npm/opencc-data/data/TWPhrasesOther.txt
- // @resource TWPhrasesRev https://cdn.jsdelivr.net/npm/opencc-data/data/TWPhrasesRev.txt
- // @resource TWVariants https://cdn.jsdelivr.net/npm/opencc-data/data/TWVariants.txt
- // @resource TWVariantsRev https://cdn.jsdelivr.net/npm/opencc-data/data/TWVariantsRev.txt
- // @resource TWVariantsRevPhrases https://cdn.jsdelivr.net/npm/opencc-data/data/TWVariantsRevPhrases.txt
- // ==/UserScript==
- (function () {
- "use strict";
- const ToSimple = [["HKVariantsRevPhrases", "HKVariantsRev"], ["TWPhrasesRev", "TWVariantsRevPhrases", "TWVariantsRev"], ["TSPhrases", "TSCharacters"]];// to Simple Chinese
- const ToTraditional = [["TWVariantsRevPhrases", "TWVariantsRev"], ["HKVariantsRevPhrases", "HKVariantsRev"], ["JPShinjitaiPhrases", "JPShinjitaiCharacters", "JPVariantsRev"], ["STPhrases", "STCharacters"]];
- const ToTaiwan = [["STPhrases", "STCharacters"], "TWVariants", "TWPhrases"];
- const ToHongKong = [["STPhrases", "STCharacters"], "HKVariants"];
- const NODE_DICT = ToSimple;
- const excludeTag = new RegExp("SCRIPT|HR|BR|TEXTAREA|BR|META");
- const excludeType = new RegExp("text|search|hidden");
- function convert_chinese_wasm() {
- function base64ToUint8Array(base64String) {
- const padding = "=".repeat((4 - base64String.length % 4) % 4);
- const base64 = (base64String + padding)
- .replace(/\-/g, "+")
- .replace(/_/g, "/");
- const rawData = window.atob(base64);
- let outputArray = new Uint8Array(rawData.length);
- for (let i = 0; i < rawData.length; ++i) {
- outputArray[i] = rawData.charCodeAt(i);
- }
- return outputArray;
- }
- const wasm = base64ToUint8Array(GM_getResourceURL("opencc_wasm").slice(24));
- console.log("OpenCC 正在加载");
- init(wasm).then(() => {
- let build = ConverterBuild.new();
- console.log("OpenCC 加载字典");
- NODE_DICT.forEach(item => {
- if (Array.isArray(item)) {
- item.forEach(function (item) {
- build.adddict(GM_getResourceText(item));
- });
- } else {
- console.assert(typeof item == "string");
- build.adddict(GM_getResourceText(item));
- }
- build.group();
- });
- console.log("OpenCC 加载字典完成");
- const converter = build.build();
- function onClose() {
- converter.delete();
- }
- function translate(pNode) {
- var childs;
- if (pNode) {
- childs = pNode.childNodes;
- } else {
- console.log("OpenCC 翻译开始");
- childs = document.documentElement.childNodes;
- }
- if (childs) {
- for (let i = 0; i < childs.length; i++) {
- const child = childs.item(i);
- if (excludeTag.test(child.tagName)) continue;
- if (child.title) {
- converter.convert(child.title).then(text => {
- if (child.title != text) {
- child.title = text;
- }
- });
- }
- if (child.alt) {
- converter.convert(child.alt).then(text => {
- if (child.alt != text) {
- child.alt = text;
- }
- });
- }
- if (child.tagName == "INPUT" && !excludeType.test(child.type)) {
- if (child.value) {
- converter.convert(child.value).then(text => {
- if (child.value != text) {
- child.value = text;
- }
- });
- }
- if (child.placeholder) {
- converter.convert(child.placeholder).then(text => {
- if (child.placeholder != text) {
- child.placeholder = text;
- }
- });
- }
- } else if (child.nodeType == 3) {
- if (child.data) {
- converter.convert(child.data).then(text => {
- if (child.data != text) {
- child.data = text;
- }
- });
- }
- } else {
- if (child.nodeType == 1) {
- translate(child);
- }
- }
- }
- }
- if (!pNode) {
- console.log("OpenCC 翻译完成");
- }
- }
- GM_registerMenuCommand("中文转换", translate);
- GM_registerMenuCommand("关闭资源", onClose);
- setTimeout(function () {
- translate();
- const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
- let observer = new MutationObserver(function (records) {
- records.map(function (record) {
- if (record.addedNodes) {
- [].forEach.call(record.addedNodes, function (item) {
- translate(item);
- });
- }
- });
- });
- const option = {
- 'childList': true,
- 'subtree': true
- };
- observer.observe(document.body, option);
- }, 1000);
- });
- }
- convert_chinese_wasm();
- })();