各ブックマークレットの自動呼び出し(All-in-One)

機能概要

URLやページ内容を識別し、公開済みのブックマークレットから必要なもののみを呼び出して実行します。
その時点の最新のスクリプトを呼び出しますので、新しいブックマークレットが公開されても登録し直す必要はありません。

使用上の注意

このブックマークレットは、判定用データと最新バージョンのブックマークレットスクリプトを取得するため、このブックマークレットの実行の度に本サイト(nya3.pages.dev)への通信が発生します。
万が一、本Webサイトが落ちている場合は使用できませんので、保険として普段ご利用になる個別のブックマークレットも登録しておくことをお勧めします。

2024/5/5時点での対応ブックマークレットは以下となります
今後さらに増えていく可能性がありますが、自動呼び出しのため再登録は不要です
※詳細は各ブックマークレットのリンク先の説明を参照してください

※状況によって使い分けるようなブックマークレットについては含まれませんので、個別で呼び出してください

以下は、追加スクリプト実行オプション付きの場合にのみ実行します
不要な場合は「通常バージョン」のほうで登録してください


※ブックマークレットの登録・利用方法が分からない場合は、基本的な使い方のページを参考にしてください

ブックマークレット文字列

以下の文字列でブックマークレットを登録し、目的のブックマークレットを利用するページで呼び出してください。
※詳細は各ブックマークレットの説明を参照してください

ダミー登録用の空ページのリンク

通常バージョン

※このバージョンは「待合室通過後の残り時間表示」は実行されません

スマホの場合
iPhone Safari / Chrome および Android Chrome など
ブックマークレット文字列
PCブラウザの場合
以下のリンクボタンを、ブラウザのブックマークバーへドラッグ&ドロップして登録してください



追加スクリプト実行オプション付き

※このバージョンは、どのページでも毎回「待合室通過後の残り時間表示」が実行されます

【補足】通常バージョンとの文字列の違いについて

「追加スクリプト実行オプション付き」はブックマークレット文字列の末尾のカッコ内に 'e' が付いているかだけの違いになります

スマホの場合
iPhone Safari / Chrome および Android Chrome など
ブックマークレット文字列
PCブラウザの場合
以下のリンクボタンを、ブラウザのブックマークバーへドラッグ&ドロップして登録してください


使い方

目的のブックマークレットを利用するページで呼び出してください。
※詳細は各ブックマークレットの説明を参照してください

ソースコード

ブックマークレット化前のソースコードです
ご自身で表示等カスタマイズされたい方はご自由にご利用ください
※ブックマークレット化の方法については記載していません

JavaScriptコード
コピー
javascript: (async function (ver) {
  if (!location.hostname.endsWith('.tokyodisneyresort.jp')) {
    alert('このサイト(ドメイン)では実行できません');
    return;
  }

  ver = ver ?? '';
  let executeExtra = false;
  if (ver.startsWith('e')) {
    executeExtra = true;
    ver = ver.slice(1);
  }

  const host = 'https://nya3.pages.dev';
  const listPath = `${host}/tools/bookmarklet/pub/list`;
  let listFileUrl;
  if (ver === '') {
    listFileUrl = `${listPath}/all_in_one_script_list.json`;
  } else {
    listFileUrl = `${listPath}/all_in_one_script_list.${ver}.json`;
  }

  let data;
  try {
    const res = await fetch(listFileUrl);
    data = await res.json();
  } catch (e) {
    alert('ブックマークレットの実行に必要なデータの取得ができませんでした');
    return;
  }

  const targetScripts = [];
  for (const script in data.scriptList) {
    const extra = data.scriptList[script].extra ?? false;
    if (extra && !executeExtra) {
      continue;
    }
    const conditions = data.scriptList[script].conditions;
    let match = true;
    for (const condition_type in conditions) {
      let type_match = false;
      const conditionTargetList = conditions[condition_type];
      if (condition_type == 'urls') {
        for (const url of conditionTargetList) {
          if (location.href.includes(url)) {
            type_match = true;
            break;
          }
        }
      } else if (condition_type == 'elements') {
        for (const selectorList of conditionTargetList) {
          let match_sub = true;
          for (const selector of selectorList) {
            if (!document.querySelector(selector)) {
              match_sub = false;
              break;
            }
          }
          if (match_sub) {
            type_match = true;
            break;
          }
        }
      }
      match = match && type_match;
      if (!match) {
        break;
      }
    }
    if (match) {
      targetScripts.push(script);
    }
  }

  if (targetScripts.length == 0) {
    alert('このページで実行可能なブックマークレットはありません');
    return;
  }

  const basePath = data.basePath;
  let anyRerunnable = false;
  let alreadyExecuted = false;
  for (const script of targetScripts) {
    if (data.scriptList[script]) {
      const scriptParam = data.scriptList[script];
      const rerunnable = scriptParam.rerunnable ?? false;
      const el_id = `__bookmarklet_${script}__`;
      if (document.getElementById(el_id)) {
        if (rerunnable) {
          document.getElementById(el_id).remove();
        } else {
          alreadyExecuted = true;
          continue;
        }
      }

      anyRerunnable ||= rerunnable;
      let scriptUrl;
      if (ver === '') {
        scriptUrl = `${host}/${basePath}${script}.js`;
      } else {
        const version = scriptParam.version;
        scriptUrl = `${host}/${basePath}${script}.${version}.js`;
      }

      const el_script = document.createElement('script');
      el_script.id = el_id;
      el_script.src = scriptUrl;
      document.body.appendChild(el_script);
    }
  }
  if (alreadyExecuted && !anyRerunnable) {
    alert('ブックマークレットはすでに実行されています');
  }
})();