您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Atcoderの問題ページにタイトルをコピーするボタンを追加する
当前为
// ==UserScript== // @name Atcoder Title Copy // @namespace http://tampermonkey.net/ // @version 1.2 // @description Atcoderの問題ページにタイトルをコピーするボタンを追加する // @author sin471 // @match https://atcoder.jp/contests/*/tasks/* // @grant none // @license MIT // ==/UserScript== /* ユーザー設定項目 */ /* 先頭のアルファベットとハイフンの除外 (A - AtCoder → AtCoder) 除外する場合はtrue 除かない場合はfalse */ const is_remove_head = false //true or false /* 拡張子の追加 追加する場合はダブルクオテーションの中に拡張子を入力 (A - AtCoder → A - AtCoder.hoge) */ const extension = "";//ex: .hoge /* Copied!の表示時間 デフォルトでは1500ms(1.5秒) */ const sleepTime = 1500 /* 設定項目終了 */ function process_text(text) { //ユーザーが設定した拡張子の追加 text += extension //先頭のアルファベットとハイフンを除去するか if (is_remove_head) { text = text.slice(4) } return text } function copy() { var title = document.getElementsByClassName("h2")[0]; //改行文字を削除 var text = title.firstChild.textContent.trim(); //ユーザー設定に合わせて加工 text = process_text(text) navigator.clipboard.writeText(text); }; // ミリ秒間待機する function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function notifyCopied(a) { a = this.name; a.textContent = "Copied!"; await sleep(1500); a.textContent = "Copy"; }; function create_button() { var parent = document.getElementsByClassName("h2"); var a = document.createElement("a"); a.textContent = "Copy"; //AtcoderのCopyボタンと同じCSSを適用 a.setAttribute("class", "btn btn-default btn-sm"); parent[0].appendChild(a); a.addEventListener('click', copy, false); //ボタン内のテキスト内容を一定時間"Copied!"に書き換え a.addEventListener('click', { name: a, handleEvent: notifyCopied }); }; create_button();