Youtube等の動画サイトで現在の再生時間を保存
このスクリプトはローカルストレージを使用していますがFirefoxではタブ間でローカルストレージの同期に問題があるらしく複数のタブでYoutubeを開いている場合本来意図した動作をしない可能性があります。また再起動時ローカルストレージに本来保存されているはずのキーが保存されていない現象を確認しています。従ってFirefoxではYoutubeを単一のタブで開かれる環境を前提とします。また再起動時には動作を保証しないものとします
直近の動画のみ再生時間を保存
// ==UserScript== // @name save_video_currentime // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author You // @match https://www.youtube.com/watch?v=* // @grant none // ==/UserScript== var result = document.evaluate('//video', document, null, 7, null); var result2 = document.evaluate('//input[@id="search"]', document, null, 7, null); //動画の上にある検索バーで入力文字の変更を感知してフォーカスアウト後作動 result2.snapshotItem(0).addEventListener('change', function () { if ("v_savetime" in localStorage) { //動画の上にある検索バーでremoveと入力後フォーカスアウトでキー削除 if (result2.snapshotItem(0).value == "remove") { localStorage.removeItem('v_savetime'); alert("ローカルストレージから設定したキーを削除しました"); } //検索バーで入力文字の変更後フォーカスアウトで保存された再生時間から再生する、もしくは現在の再生時間を保存 var p_time = localStorage.getItem("v_savetime"); if (p_time < 60) { if (window.confirm(p_time + "秒から再生しますか?それとも現在の再生時間で保存しますか?\n前者であれば「OK」を、後者であれば「キャンセル」を押してください")) { result.snapshotItem(0).currentTime = p_time; result.snapshotItem(0).play(); } else { localStorage.setItem("v_savetime", Math.floor(result.snapshotItem(0).currentTime)); alert("ローカルストレージに保存しました"); } } else if (p_time == 60 || p_time < 60 * 60) { if (window.confirm(Math.floor((p_time / 60)) + "分" + (p_time - (Math.floor((p_time / 60)) * 60)) + "秒から再生しますか?それとも現在の再生時間で保存しますか?\n前者であれば「OK」を、後者であれば「キャンセル」を押してください")) { result.snapshotItem(0).currentTime = p_time; result.snapshotItem(0).play(); } else { localStorage.setItem("v_savetime", Math.floor(result.snapshotItem(0).currentTime)); alert("ローカルストレージに保存しました"); } } else { if (window.confirm(Math.floor(Math.floor((p_time / 60)) / 60) + "時間" + Math.floor(Math.floor((p_time / 60)) - (Math.floor(Math.floor((p_time / 60)) / 60) * 60)) + "分から再生しますか?それとも現在の再生時間で保存しますか?\n前者であれば「OK」を、後者であれば「キャンセル」を押してください")) { result.snapshotItem(0).currentTime = p_time; result.snapshotItem(0).play(); } else { localStorage.setItem("v_savetime", Math.floor(result.snapshotItem(0).currentTime)); alert("ローカルストレージに保存しました"); } } } else { //キーが存在しなければ現在の再生時間でキーを保存するか確認を取る if (result2.snapshotItem(0).value != "remove") { if (window.confirm("現在の再生時間で保存しますか?")) { localStorage.setItem("v_savetime", Math.floor(result.snapshotItem(0).currentTime)); alert("ローカルストレージに保存しました。\n削除する場合は動画の上にある検索バーで「remove」と入力するか\nv_savetimeキーを削除してください"); } } } });
動画ごとに再生時間を保存
var result = document.evaluate('//video', document, null, 7, null); if (location.href in localStorage) { var p_time = localStorage.getItem(location.href); if (p_time < 60) { if (window.confirm(p_time + "秒から再生します")) { result.snapshotItem(0).currentTime = p_time; result.snapshotItem(0).play(); } } else if (p_time == 60 || p_time < 60 * 60) { if (window.confirm(Math.floor((p_time / 60)) + "分" + (p_time - (Math.floor((p_time / 60)) * 60)) + "秒から再生します")) { result.snapshotItem(0).currentTime = p_time; result.snapshotItem(0).play(); } } else { if (window.confirm(Math.floor(Math.floor((p_time / 60)) / 60) + "時間" + Math.floor(Math.floor((p_time / 60)) - (Math.floor(Math.floor((p_time / 60)) / 60) * 60)) + "分から再生します")) { result.snapshotItem(0).currentTime = p_time; result.snapshotItem(0).play(); } } } else { localStorage.setItem(location.href, Math.floor(result.snapshotItem(0).currentTime)); alert("保存しました"); }