您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
View a Wikipedia entry with two (or more?) languages side by side for comparison and language learning.
当前为
// ==UserScript== // @name Wikipedia multi language view // @name:zh Wikipedia 多语言浏览 // @namespace https://userscript.snomiao.com/ // @author [email protected] // @version 0.0.4 // @description View a Wikipedia entry with two (or more?) languages side by side for comparison and language learning. // @description:zh 以并列多语言视角浏览维基百科 // @match https://*.wikipedia.org/wiki/* // @match https://zh.wikipedia.org/zh-*/* // @grant none // @run-at document-start // @license GPL-3.0+ // @supportURL https://github.com/snomiao/userscript.js/issues // @contributionURL https://snomiao.com/donate // ==/UserScript== // // ref: // [javascript - Resize Cross Domain Iframe Height - Stack Overflow]( https://stackoverflow.com/questions/22086722/resize-cross-domain-iframe-height ) // // const Langs = ['en', 'ja', 'zh', 'de', 'fr', 'es', 'ru', 'it', 'ko', 'pt', 'ar', 'vi', 'pl', 'uk', 'nl', 'sv', 'id', 'fi', 'no', 'tr', 'cs', 'da', 'he', 'hu', 'ro', 'th'] const langs = ['en', 'ja', 'zh'] // modify this to your preferred languages, will be used to load the 2nd language iframe // if (location.hash.match("#langIfr")) { // iframe code send height const sendHeight = () => parent.postMessage?.( { langIfr: { height: document.body.scrollHeight } }, "*" ); window.addEventListener("resize", sendHeight, false); window.addEventListener("load", sendHeight, false); sendHeight(); document.head.appendChild(createHtmlElement('<base target="_parent" />')) } else { // parent code recv iframe's height const msgHandler = (e) => { const setHeight = (height) => height && document.querySelector("#langIfr")?.setAttribute("height", height); setHeight(e.data?.langIfr?.height); }; window.addEventListener("message", msgHandler, false); // load iframe const langLnksGet = () => Object.fromEntries( [...document.querySelectorAll("a.interlanguage-link-target")] .map((e) => ({ lang: e.getAttribute("lang"), href: e.href, language: e.textContent, })) .map((e) => [e.lang, e]) ); const exlangFrameLoad = () => { const langLnks = langLnksGet(); const langIframeLoad = (lang = "en") => { if (!langLnks[lang]) return false; document.body.setAttribute("style", "width: 50vw"); document.body.querySelector("#langIfr")?.remove(); document.querySelector("#sidebarCollapse")?.click(); const langIfr = Object.assign(document.createElement("iframe"), { id: "langIfr", src: langLnks[lang].href + "#langIfr", }); langIfr.setAttribute( "style", "border: none; position:absolute; left: 50vw; top: 0vh; width: 50vw" ); document.body.appendChild(langIfr); return true; }; // the load 2st language for current page langs.find(lang => langIframeLoad(lang)) }; window.addEventListener("load", exlangFrameLoad, false); } function createHtmlElement(innerHTML= '<span>hello</span>'){ return Object.assign(document.createElement('div'), {innerHTML}).children[0] }