#javascript #jquery #cookies #clipboard
#язык JavaScript #jquery #файлы cookie #буфер обмена
Вопрос:
У меня есть этот фрагмент кода ниже, который, по сути, по щелчку тега a копирует текст поля ввода в буфер обмена, а затем открывает новую вкладку, в которую пользователь вставляет текст.
Все это работает совершенно нормально ДО тех пор, пока файл cookie не будет установлен. Я попробовал это, протестировав 10 различных тегов a до того, как будет установлен файл cookie.
Как только файл cookie будет установлен, новая вкладка все равно откроется, поле ввода, из которого я копирую текст, все еще обновляется, но если я вставлю его в блокнот или в открывшееся окно, это будет то, что было скопировано последним, а не самым последним. Если я удалю файл cookie и перезагрузлю его, все вернется к тому, как оно должно функционировать.
Поэтому я не уверен, почему установленный файл cookie остановит обновление буфера обмена.
//Set Cookie Function function setCookie(cname, cvalue, exdays) { const d = new Date(); d.setTime(d.getTime() (exdays * 24 * 60 * 60 * 1000)); let expires = "expires=" d.toUTCString(); document.cookie = cname "=" cvalue ";" expires ";path=/"; } //Get Cookie Function function getCookie(name) { var dc = document.cookie; var prefix = name "="; var begin = dc.indexOf("; " prefix); if (begin == -1) { begin = dc.indexOf(prefix); if (begin != 0) return null; } else { begin = 2; var end = document.cookie.indexOf(";", begin); if (end == -1) { end = dc.length; } } // because unescape has been deprecated, replaced with decodeURI //return unescape(dc.substring(begin prefix.length, end)); return decodeURI(dc.substring(begin prefix.length, end)); } $(document).on('click', '.pop-top ul li a', function() { var copiedRole = $(this); $('#copyText').val(copiedRole.text()); navigator.clipboard.writeText($('#copyText').val()); var acknowledgeExists = getCookie("acknowledge"); if(acknowledgeExists == null) { $('#copyMessage, .frosted').addClass('show'); } else { window.open('[redacted]', '_blank'); } }); //Create Cookies $("#acknowledge").on('click', function() { $('#copyMessage, .frosted').removeClass('show'); window.open('[redacted]', '_blank'); if($('#never').is(':checked')) { setCookie("acknowledge", "yes", 1); } });
Комментарии:
1. Таким образом, выясняется, что проблема заключалась в том, что окно открывалось немедленно, так как файлы cookie мешали окну уведомления с кнопкой для открытия новой вкладки.
Ответ №1:
Так что получается, что это было не печенье, а окно.открывайте огонь немедленно. Документы MDN для API буфера обмена обратите внимание, что вкладка должна быть активной. Поэтому, хотя в моем коде есть функция записи в буфер обмена перед проверкой файлов cookie, она все равно сработает достаточно быстро, чтобы предотвратить это.
Хотя это не идеальное решение, обертывание окна.открыть в файле cookie, если/иначе в режиме ожидания в течение 1 секунды работает нормально.