файл cookie, возможно, блокирует API буфера обмена

#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 секунды работает нормально.