Javascript - 将变量作为参数传递时,描述问题中的 Ical 新行
Javascript - Ical new line in description issue when passing variable as a parameter
首先我查看了这个问题here and ,它对我的问题没有帮助:
我正在使用此处 github link
稍作修改的 ics.js 代码
var ics = function() {
'use strict';
if (navigator.userAgent.indexOf('MSIE') > -1 && navigator.userAgent.indexOf('MSIE 10') == -1) {
console.log('Unsupported Browser');
return;
}
var SEPARATOR = (navigator.appVersion.indexOf('Win') !== -1) ? '\r\n' : '\n';
var calendarEvents = [];
var calendarStart = [
'BEGIN:VCALENDAR',
'VERSION:2.0',
'PRODID:http://www.example.com/calendarapplication/',
'METHOD:PUBLISH'
].join(SEPARATOR);
var calendarEnd = SEPARATOR + 'END:VCALENDAR';
return {
/**
* Returns events array
* @return {array} Events
*/
'events': function() {
return calendarEvents;
},
/**
* Returns calendar
* @return {string} Calendar in iCalendar format
*/
'calendar': function() {
return calendarStart + SEPARATOR + calendarEvents.join(SEPARATOR) + calendarEnd;
},
/**
* Add event to the calendar
* @param {string} subject Subject/Title of event
* @param {string} description Description of event
* @param {string} location Location of event
* @param {string} begin Beginning date of event
* @param {string} stop Ending date of event
*/
'addEvent': function(subject, description, location, begin, stop) {
// I'm not in the mood to make these optional... So they are all required
if (typeof subject === 'undefined' ||
typeof description === 'undefined' ||
typeof location === 'undefined' ||
typeof begin === 'undefined' ||
typeof stop === 'undefined'
) {
return false;
};
var start_date = new Date(begin);
var end_date = new Date(stop);
var start = start_date.toISOString().replace(/-/g,'').replace(/:/g, '').replace('.000', '');
var end = end_date.toISOString().replace(/-/g,'').replace(/:/g, '').replace('.000', '');
var calendarEvent = [
'BEGIN:VEVENT',
'UID:',
'ORGANIZER:',
'CLASS:PUBLIC',
'DESCRIPTION:' + description,
'DTSTART:' + start,
'DTEND:' + end,
'LOCATION:' + location,
'SUMMARY;LANGUAGE=en-us:' + subject,
'TRANSP:TRANSPARENT',
'END:VEVENT',
//'END:VCALENDAR'
].join(SEPARATOR);
calendarEvents.push(calendarEvent);
return calendarEvent;
},
这可以通过两种方式调用:
对信息进行硬编码 -
cal.addEvent('Demo Event', 'This is an all day event', 'Nome, AK', '8/7/2013', '8/7/2013');
并传递参数:
cal.addEvent(subject, description, location, begin, end);
对于第一个选项,解决方案是在问题 here 中添加 \n\n
但是,我有一个变量描述,我将其传递给第二个选项以调用此函数
var description = document.getElementById("description").value;
var subject = document.getElementById("subject").value;
var location = document.getElementById("location").value;
var begin = document.getElementById("begin").value;
var end = document.getElementById("end").value;
var cal = ics();
cal.addEvent( subject, summary, location, begin, end);
描述是一个文本框,可以由用户填写,当发送到 ics() 时将填写 ical for outlook 的要求。
不幸的是,由于描述问题,只有第一行文本从文本区域发送到日历条目。
我非常不确定我需要在代码中更改什么才能使所有文本都显示在日历条目中。我正在寻找 js/jquery 解决方案。老实说,我不知道从哪里开始使用我正在使用的当前代码来实现这一目标。
这可能是一种编码问题,或者您的元素“描述”的内容不正确。请检查变量描述的内容,如下所示:
var description = document.getElementById("description").value;
console.log(description.split('\n').join('#NEWLINE#'));
在这些 ical 对象中,换行符或换行符将被解释为描述的结尾。尝试用“\\n”或类似的东西引用它。
有关详细信息,您必须检查 rfc5546 的规范,但文档不是很清楚。
我希望这对你有进一步的帮助。
首先我查看了这个问题here and
我正在使用此处 github link
稍作修改的 ics.js 代码var ics = function() {
'use strict';
if (navigator.userAgent.indexOf('MSIE') > -1 && navigator.userAgent.indexOf('MSIE 10') == -1) {
console.log('Unsupported Browser');
return;
}
var SEPARATOR = (navigator.appVersion.indexOf('Win') !== -1) ? '\r\n' : '\n';
var calendarEvents = [];
var calendarStart = [
'BEGIN:VCALENDAR',
'VERSION:2.0',
'PRODID:http://www.example.com/calendarapplication/',
'METHOD:PUBLISH'
].join(SEPARATOR);
var calendarEnd = SEPARATOR + 'END:VCALENDAR';
return {
/**
* Returns events array
* @return {array} Events
*/
'events': function() {
return calendarEvents;
},
/**
* Returns calendar
* @return {string} Calendar in iCalendar format
*/
'calendar': function() {
return calendarStart + SEPARATOR + calendarEvents.join(SEPARATOR) + calendarEnd;
},
/**
* Add event to the calendar
* @param {string} subject Subject/Title of event
* @param {string} description Description of event
* @param {string} location Location of event
* @param {string} begin Beginning date of event
* @param {string} stop Ending date of event
*/
'addEvent': function(subject, description, location, begin, stop) {
// I'm not in the mood to make these optional... So they are all required
if (typeof subject === 'undefined' ||
typeof description === 'undefined' ||
typeof location === 'undefined' ||
typeof begin === 'undefined' ||
typeof stop === 'undefined'
) {
return false;
};
var start_date = new Date(begin);
var end_date = new Date(stop);
var start = start_date.toISOString().replace(/-/g,'').replace(/:/g, '').replace('.000', '');
var end = end_date.toISOString().replace(/-/g,'').replace(/:/g, '').replace('.000', '');
var calendarEvent = [
'BEGIN:VEVENT',
'UID:',
'ORGANIZER:',
'CLASS:PUBLIC',
'DESCRIPTION:' + description,
'DTSTART:' + start,
'DTEND:' + end,
'LOCATION:' + location,
'SUMMARY;LANGUAGE=en-us:' + subject,
'TRANSP:TRANSPARENT',
'END:VEVENT',
//'END:VCALENDAR'
].join(SEPARATOR);
calendarEvents.push(calendarEvent);
return calendarEvent;
},
这可以通过两种方式调用: 对信息进行硬编码 -
cal.addEvent('Demo Event', 'This is an all day event', 'Nome, AK', '8/7/2013', '8/7/2013');
并传递参数:
cal.addEvent(subject, description, location, begin, end);
对于第一个选项,解决方案是在问题 here 中添加 \n\n
但是,我有一个变量描述,我将其传递给第二个选项以调用此函数
var description = document.getElementById("description").value;
var subject = document.getElementById("subject").value;
var location = document.getElementById("location").value;
var begin = document.getElementById("begin").value;
var end = document.getElementById("end").value;
var cal = ics();
cal.addEvent( subject, summary, location, begin, end);
描述是一个文本框,可以由用户填写,当发送到 ics() 时将填写 ical for outlook 的要求。 不幸的是,由于描述问题,只有第一行文本从文本区域发送到日历条目。
我非常不确定我需要在代码中更改什么才能使所有文本都显示在日历条目中。我正在寻找 js/jquery 解决方案。老实说,我不知道从哪里开始使用我正在使用的当前代码来实现这一目标。
这可能是一种编码问题,或者您的元素“描述”的内容不正确。请检查变量描述的内容,如下所示:
var description = document.getElementById("description").value;
console.log(description.split('\n').join('#NEWLINE#'));
在这些 ical 对象中,换行符或换行符将被解释为描述的结尾。尝试用“\\n”或类似的东西引用它。 有关详细信息,您必须检查 rfc5546 的规范,但文档不是很清楚。
我希望这对你有进一步的帮助。