1300

移行用のテストです

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("保存しました");
}