URLやページ内容を識別し、公開済みのブックマークレットから必要なもののみを呼び出して実行します。
その時点の最新のスクリプトを呼び出しますので、新しいブックマークレット(更新および新機能)が公開されても登録し直す必要はありません。
※状況によって使い分けるようなブックマークレットについては含まれませんので、個別で呼び出してください
以下は、追加スクリプト実行オプション付きの場合にのみ実行します
不要な場合は「通常バージョン」のほうで登録してください
※ブックマークレットの登録・利用方法が分からない場合は、基本的な使い方のページを参考にしてください
以下の文字列でブックマークレットを登録し、目的のブックマークレットを利用するページで呼び出してください。
※詳細は各ブックマークレットの説明を参照してください
※このバージョンは「待合室通過後の残り時間表示」は実行されません
※このバージョンは、どのページでも毎回「待合室通過後の残り時間表示」が実行されます
「追加スクリプト実行オプション付き」はブックマークレット文字列の末尾のカッコ内に 'e' が付いているかだけの違いになります
目的のブックマークレットを利用するページで呼び出してください。
※詳細は各ブックマークレットの説明を参照してください
ブックマークレット化前のソースコードです
ご自身で表示等カスタマイズされたい方はご自由にご利用ください
※ブックマークレット化の方法については記載していません
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('ブックマークレットはすでに実行されています');
}
})();