Откройте URL как тег <a>в Bookmarklet - PullRequest
0 голосов
/ 30 декабря 2018

Просто, чтобы объяснить мое конкретное использование для него;Я сделал очень простой букмарклет, чтобы открыть эквивалентную страницу explainxkcd из любого xkcd комикса.Это выглядит так:

javascript:a=new URL(location);a.host==="xkcd.com"&&(a.host="explain"+a.host,open(a))

unminified:

let url = new URL(location);
if (url.host === "xkcd.com") {
    url.host = "explain" + url.host;
    open(url) # I want this to open "dynamically" like an <a> tag instead
}

Открывая как тег <a>, я имею в виду заменить текущую вкладку (_self), если клавиша Ctrl нене удерживаться, в противном случае откройте новую вкладку (_blank), если удерживается Ctrl.Подходы, о которых я думал:

  • Проверьте event.ctrlKey и используйте его для передачи в "_self" или "_blank", но, к сожалению, это не событие ...

  • Добавить ссылку на страницу программно и затем щелкнуть по ней.Это просто кажется хакерским.

  • Добавьте событие keydown и keyup и проследите, нажата ли клавиша Ctrl, но это не работает в букмарклете.

Есть ли какой-нибудь способ сделать это с помощью букмарклета или какой-то метод, который я пропустил?

1 Ответ

0 голосов
/ 30 декабря 2018

Редактировать:
Поскольку невозможно определить, нажата ли клавиша Ctrl или изменить поведение на ее основе, нельзя избежать других, менее идеальных решений.

Пример:

javascript:void%20function(){if(%22xkcd.com%22===location.host){var%20o=%22https://explain%22+location.host.toString()+location.pathname.toString(),n=confirm(o+%22%20to%20be%20openend%20in%20new%20tab%22);n%3Fwindow.open(o,%22_blank%22):window.location.replace(o)}}();
  • Запуск подсказки
  • Отмена / Выход: текущее окно / вкладка
  • Ок / Ввод / Пробел: новая вкладка

Ваш«поток» станет: нажмите на закладку, сразу за которой следует escape или введите в зависимости от того, должна ли она открыться в новой вкладке.

...