Как вызвать вкладку браузера с предыдущим экземпляром на той же странице - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть страница с несколькими ссылками.
Каждая ссылка открывается в новой вкладке.
В следующий раз, когда я нажимаю на данную ссылку, я хочу, чтобы она вызывала ту же вкладку, где она была ранее открыта.
Возможно ли это? Как?
Все страницы принадлежат одному домену.

Я видел этот ответ: Проверьте, открыт ли мой сайт в другой вкладке
Кажется возможным сохранить URI в localStorage для обнаружения повторений.
Я думаю эта техника позволит мне обнаруживать повторы, но я не могу понять, как нацелиться на указанную c вкладку (активировать ее, перенести на передний план).
Я не управляю сервером, нужно реализовать его в клиенте (через Tampermonkey).

Для любопытных я много работаю с проблемами BitBucket.
Страница со ссылками - это список проблем, другие страницы - это отдельные проблемы.
Я хочу быть защищенным от открытия одна и та же проблема дважды, обновление обеих версий и потеря данных.
Кроме того, каждая страница может иметь два разных URI, один для просмотра, а другой для редактирования. Но я думаю, что смогу решить это с JS.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Вызов вкладки браузера по имени

Сначала можно указать имя для каждой создаваемой вкладки, используя window.open():

let newWindow = window.open(newUrl, newWindowName);

или используя атрибут target в тег привязки:

<a href="http://my-new-url" href="myNewWindowName">Make New Window</a>

Если вы затем позвоните window.open с именем существующей вкладки, это будет использовать существующую вкладку. Если окно с таким именем не существует, window.open создаст новое окно (или вкладку).

Страница веб-документов MDN для Window.open

Вывод окна на передний план

Одного использования window.open() может быть недостаточно, чтобы вывести окно на передний план. Это может быть возможно с другой функцией, window.focus () , которая выдает запрос на вывод окна на передний план. Сочетание двух:

window.open(myUrl, myWindowName).focus();

Осторожно : настройка пользовательских настроек браузера может по-прежнему препятствовать фокусировке () переместить окно вперед, поэтому это не гарантируется. Из веб-документов MDN:

Может произойти сбой из-за пользовательских настроек, и не гарантируется, что окно будет передним, пока не вернется этот метод.

0 голосов
/ 19 апреля 2020

Вы можете получить URL предыдущей страницы со следующим:

let prevURL = document.referrer;

Вы можете получить URL со всех открытых вкладок с помощью функции windows.getAll() .

Из этого ответа - Вы не можете программно настроить браузер на указанную c вкладку из-за проблем безопасности. Попробуйте обновить заголовок, чтобы уведомить пользователя с помощью document.title = {{new title}}

...