Почему я исправил создание совместимого с IE генератора ICS рендеринга другой функции "undefined"? - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в StackOverflow и очень новичок в Javascript, поэтому я прошу прощения, если есть очевидная проблема с кодом или моим постом. Я не обязательно пытаюсь сделать это самым лучшим или самым красивым способом на данный момент, просто запустите этот проект до окончания моей стажировки. Я работал над тем, чтобы это https://github.com/commonpike/add-to-calendar-buttons добавление к календарю работало с Internet Explorer, который не совместим с Encode: URI или атрибутом HTML «Скачать».

С помощью комментариев к проекту и других исправлений аналогичных проблем, которые я видел, я ДУМАЛ, что мог бы добавить этот код в соответствующие места и заставить все работать. Функция календаря уже является частью кода, но я включил ее, потому что она затронута.

var href2 = (
  'BEGIN:VCALENDAR',
  'VERSION:2.0',
  'BEGIN:VEVENT',
  'URL:' + document.URL,
  'DTSTART:' + (startTime || ''),
  'DTEND:' + (endTime || ''),
  'SUMMARY:' + (event.title || ''),
  'DESCRIPTION:' + (event.description || ''),
  'LOCATION:' + (event.address || ''),
  'UID:' + (event.id || '') + '-' + document.URL,
  'END:VEVENT',
  'END:VCALENDAR');

if ((navigator.userAgent.indexOf("MSIE") != -1) || (!!document.documentMode == true)) {
  return '<a class="' + eClass + '" href="javascript:msDownloadCalendar(\'' +
    href2 + '\')">' + calendarName + '</a>';
} else {
  return '<a class="' + eClass + '" download="' + CONFIG.texts.download + '" href="' +
    href + '">' + calendarName + '</a>';
}
},

exports.msDownloadCalendar = function(url) {
  if ((navigator.userAgent.indexOf("MSIE") != -1) || (!!document.documentMode == true)) {
    var blob = new Blob([href2], {
      type: 'text/calendar;charset=utf-8'
    });
    window.navigator.msSaveOrOpenBlob(blob, 'download.ics');
  }
};

exports.addToCalendar = function(params) {
  if (params instanceof HTMLElement) {
    //console.log('HTMLElement');
    return parseCalendar(params);
  }

  if (params instanceof NodeList) {
    //console.log('NodeList');
    var success = (params.length > 0);
    Array.prototype.forEach.call(params, function(node) {
      success = success && addToCalendar(node);
    });
    return success;
  }

  sanitizeParams(params);

  if (!validParams(params)) {
    console.log('Event details missing.');
    return;
  }

  return generateMarkup(
    generateCalendars(params.data),
    params.options.class,
    params.options.id
  );
};

Это, однако, не решает проблему. Хотя это не влияет на функциональность в других браузерах, в IE он полностью разбивается, так как отображаются только заголовки, а консоль говорит, что функция addtocalendar не определена. «Addtocalender» регистрирует только как неопределенные в IE, поэтому я должен предположить что-то, что вводится в игру

if ((navigator.userAgent.indexOf("MSIE") != -1 ) || (!!document.documentMode == true ))

является виновником.

Большое спасибо всем в сообществе, кто может дать мне некоторую информацию и помочь мне в этом. Я прижал голову к стене с тем, насколько смог, используя свой текущий набор навыков, и многому научился, но боюсь, что достиг своего текущего предела.

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