Ограничить открытие вкладки только один раз, чтобы пользователь не мог создавать несколько вкладок в jquery - PullRequest
2 голосов
/ 16 января 2020

У меня есть внутреннее приложение, где у меня есть вкладка с именем "HV". Эта вкладка «HV» поступает из точки входа из cencerto.

Когда я нажимаю на вкладку «HV», в браузере открывается внешнее приложение в новой вкладке.

window.open("@viewsUrl", "HV");

Существует клинический риск, если он открывает несколько вкладок. Например, если я открываю пациента 1 на вкладке 1 и пациента 2 на вкладке 2, это дает шанс ввести неверную информацию для неверного пациента для врача.

Во избежание этого, когда врач нажимает на пациента 2, следует перезаписать вкладку 1 и отображает информацию о пациенте 2 на вкладке 1.

Итак, я хотел бы проверить, открыта ли уже вкладка, а затем заполнить ее вторым пациентом вместо открытия другой вкладки.

Есть ли способ проверить это с jquery?

Я попробовал приведенный ниже код, но он не работает, как я уже упоминал в своем требовании.

Я уже потратил 2 дня и пытаюсь найти правильное решение, но пока не получилось.

Пожалуйста, предложите мне, как это сделать.

@{
    string viewsUrl = ViewBag.viewsUrl1;
}

@section Scripts {
    <script>
        $(document).ready(function () {
            debugger;         

            //function register_tab_GUID() {

                if (typeof (Storage) !== "undefined") {

                    if (sessionStorage["tabGUID"] == null) sessionStorage["tabGUID"] = tab_GUID();
                    var guid = sessionStorage["tabGUID"];                  

                    window.addEventListener("storage", storage_Handler, false);

                    localStorage["tabGUID"] = guid;
                }
          //  }

            function storage_Handler(e) {

                if (e.key == 'tabGUID') {
                    if (e.oldValue != e.newValue) {
                        tab_Warning();
                    }


                }
                window.open("@viewsUrl", "HV");
            }

            function tab_GUID() {
                function s4() {
                    return Math.floor((1 + Math.random()) * 0x10000)
                        .toString(16)
                        .substring(1);
                }
                return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
                    s4() + '-' + s4() + s4() + s4();
            }

            function tab_Warning() {
                alert("Another tab is open!");
            }  

        });
    </script>
}

Ответы [ 2 ]

1 голос
/ 16 января 2020

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

Но есть способ добиться этого с помощью помощи javascript.

Вы должны назначить имя окна для каждой страницы, к которой вы хотите применить это поведение, используя следующую команду: javascript:

window.name = "PageUniqueID";

Затем на ссылке укажите это имя

<a href="link" target="PageUniqueID">Go</a>

Браузер автоматически откроет новую вкладку, если страница еще не открыта, и снова откроет ту же вкладку, если она уже открыта.

0 голосов
/ 17 января 2020

Вот простая демонстрация того, как судить, открыта ли вкладка:

<a href="https://www.microsoft.com/en-us" class="opener">Open microsoft.com</a> |
<a href="http://www.yahoo.com" class="opener">Open yahoo.com</a>

<script>
    window.onload = function(){
      var a = document.querySelectorAll('.opener'), w = [], url, i;
      for(i = 0; i < a.length; i++){
        (function(i){
          a[i].onclick = function(e) {
            if (!w[i] || w[i].closed) {
              url = this.href;             
              w[i] = window.open(url,"menubar = 0, scrollbars = 0");
            } else {
              console.log('window ' + url + ' is already opened');
            }
            e.preventDefault();
            w[i].focus();
          };
        })(i);
      }
    };
</script>

Результат: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...