|
|
|
|
 |
|
 |
카테고리 '$프로그래밍' - '자바스크립트'
| 11 |
 |
prototype : 굴고 짧은 스크립팅, 버그가 너무 많고 IE에 대한 처리가 미흡하다.
mootools : 항상 길어지는 코드...
|
Microsoft Script Debugger이 몇번 혹은 몇십번 실행되다가 어느 시점에서부터는 실행은 되지만
더이상 에러라인을 보여주지 않을때가 있는데 이때는 작업관리자를 열어서 프로세스 탭에서
mdm.exe 프로세스를 종료시켜주면 된다
IExplorer 재시작 해야함..
|
var target = '삐리리리';
var tableRowTpl = '<tr><td>삐리리리리리</td></tr>';
new Insertion.Bottom(target, tableRowTpl);
t has no properties => t.initializeRange(element, range);
아주 환장하는지 알았다.
뷁포인트 찍어가며 원인을 찾아보고 싶었지만 좀 바쁘다보니...
암튼 Prototypejs를 1.6.0 -> 1.5.2 다운을 시켰더니 잘 되더라.
function (element, insertions)
{
element = $(element);
if (Object.isString(insertions) ||
Object.isNumber(insertions) ||
Object.isElement(insertions) ||
insertions && (insertions.toElement || insertions.toHTML))
{
insertions = {bottom:insertions};
}
var content, t, range;
for (position in insertions)
{
content = insertions[position];
position = position.toLowerCase();
t = Element._insertionTranslations[position];
if (content && content.toElement)
{
content = content.toElement();
}
if (Object.isElement(content))
{
t.insert(element, content);
continue;
}
content = Object.toHTML(content);
range = element.ownerDocument.createRange();
t.initializeRange(element, range);
t.insert(element, range.createContextualFragment(content.stripScripts()));
content.evalScripts.bind(content).defer();
}
return element;
}
|
| illegal character: \65279 at ???.java 1 line
> javac -encoding UTF8
> javadoc -encoding UTF8
자바파일을 UTF-8로 저장후 컴파일등의 작업을 할 경우 종종 발생되는 문제다.
이 경우 에디트플러스에서 아래와같이 설정후 해당 파일을 다시 저장시키면 쉽게 해결이 가능하다.

BOM (봄; Byte Order Mark)은 '바이트 순서 표시'입니다.
유니코드가, little-endian 인지 big-endian 인지 아니면 UTF-8 인지 쉽게 알 수 있도록, 유니코드 파일이 시작되는 첫부분에 보이지 않게, 2~3바이트의 문자열을 추가하는데 이것을 BOM이라고 합니다. 텍스트 에디터 화면에서는 보이지 않고, 헥사 에디터(Hex Editor)*로 열었을 때만 보입니다.
little-endian 의 BOM: FF FE
big-endian 의 BOM: FE FF
UTF-8 의 BOM: EF BB BF
UTF-8에는 BOM이 없는 것이 보통인데, 오래된 프로그램은 BOM이 있는 UTF-8 파일에 오작동할 수 있습니다.
그렇지만 한국어 편집에서는 BOM이 있는 UTF-8이 더 좋습니다. 만약 'BOM이 없는 UTF-8 파일'에 영문과 숫자만 있고 한글이 없다면, 편집기가 그 파일을 유니코드가 아닌 일반 아스키 파일로 오인하기 때문입니다.
그런데 인터넷에 올릴 HTML/CSS/XML 파일을 UTF-8로 작성할 때에는 BOM이 있으면 문제가 생길 수 있습니다.
* 울트라에디트의 헥사 모드(Ctrl+H)로 UTF-8 파일을 보면, 16비트 유니코드처럼 보이고 BOM이 있든 없든 항상 FF FE 라는 엉뚱한 BOM이 나타납니다. 이것은 울트라에디터가 유니코드를 편집할 때, 내부적으로 '16비트 little-endian 유니코드 (UTF-16LE)'로 변환하여 편집하기 때문입니다. 진짜 헥사 에디터로 보아야만 UTF-8의 BOM인 EF BB BF 가 제대로 보이게 됩니다. 물론 BOM이 없는 UTF-8이라면 BOM이 없는 것으로 나옵니다.
|
http://blog.naver.com/onthebed/130000659256
여러 예제들은 살펴본 결과 IE에서 XMLHttpRequest 객체를 생성하는데
Msxml2.XMLHTTP와 Microsoft.XMLHTTP를 사용하는 것을 알 수 있었다.
그런데 이 두 놈에 대한 차이를 설명해주는 곳이 없어서 차이점을 찾아 어설픈 번역을 해본다.
MSXML에는 프로그램 아이디에 의존하는 버전과
프로그램아이디에 독립적인 버전이 존재한다.
일반적으로 스크립트가 구동되는 클라이언트가
어떤 버전의 IE일지 또 어떤 버전의 MSXML
이 설치되어 있을지 모를 경우
프로그램 아이디에 독립적인 버전을 사용하는 것이 좋다.
MSXML 버전이 어떤 프로그램 아이디와 연결되는지
정확히 알 필요 없을 때 사용할 수 있다.
XML DOM document의 프로그램 아이디 독립버전은 Microsoft.XMLDOM이며,
IE 5 이후에서 XML DOM을 다음과 같이 생성한다.
var xmlDocument = new ActiveXObject(’Microsoft.XMLDOM’);
와 같이 생성한다.
XML HTTP request 객체의 프로그램 아이디 독립 버전은 Microsoft.XMLHTTP이며,
IE 5 이후에서 XML HttpRequest객체는 다음과 같이 생성한다.
var httpRequest = new ActiveXObject(’Microsoft.XMLHTTP’);
프로그램 아이디 같은 실제 MSXML버전은 인스톨된 MSXML버전에 의존한다.
Which actual MSXML version such a program id is bound to depends on the MSXML version(s) installed and even on the mode (side-by-side or replace mode) a version is installed in.
프로그램 의존 버전은 서버에
어떤 버전의 MSXML이 설치되었는지 알고 있는 상태로
스크립팅 작업을 할 경우,
인트라넷 속해 있는 모든 클라이언트에
어떤 버전의MSXML이 설치 되어있는지 알고있는 상태에서
작업할 경우,
마지막으로 특정 버전의 MSXML 에서만
지원되는 기능을 사용하기를 원할 때 사용할 수 있다.
MSXML 3,4,5에 해당하는 XMLHttpRequest 객체의 프로그램 아이디 의존 버전은 각각 다음과 같다.
Msxml2.XMLHTTP.version.number
예) MSXML 3으로 구현된 XMLHttpRequest 객체 생성방법
var httpRequest = new ActiveXObject(’Msxml2.XMLHTTP.3.0′);
MSXML 4으로 구현된 XMLHttpRequest 객체 생성방법
var httpRequest = new ActiveXObject(’Msxml2.XMLHTTP.4.0′);
MSXML 5으로 구현된 XMLHttpRequest 객체 생성방법
var httpRequest = new ActiveXObject(’Msxml2.XMLHTTP.5.0′);
NOTE >> MSXML 4 이후로는 프로그램 아이디 의존버전만이 존재한다.
따라서 그 이전의 프로그램 아이디 독립 버전은 MSXML 4 or 5에는 바운드 되지 않는다.
원문 : http://www.faqts.com/knowledge_base/view.phtml/aid/35742
….
…..
………
2.6 버전 :
this.transport = new ActiveXObject(’Msxml2.XMLHTTP.2.6′);
위와 같이 객체를 생성, 서버에 접속하여 XML을 리턴 받은 후에
this.transport .responseXML.documentElement로 접근할 경우
에러없이 DOM 객체가 리턴되었다.
3.0 버전 :
this.transport = new ActiveXObject(’Msxml2.XMLHTTP.3.0′);
위와 같이 객체를 생성한 후 2.6과 같은 과정을 거친 후에
this.transport .responseXML.documentElement 로 접근할 경우
null이 리턴되는 현상이 발생했다.
또 ‘Microsoft.XMLHTTP’의 경우
1.0 버전만이 설치되 있었고 아래와 같이 객체를 생성한 후에
this.transport .responseXML.documentElement으로 접근할 때는
문제 없이 수행되었다.
this.transport = new ActiveXObject(’Microsoft.XMLHTTP’)
이는 Microsoft.XMLHTTP과 Msxml2.XMLHTTP 2.6 버전이 바운드 됐기 때문으로 판단된다.
|
공식사이트의 다큐먼트에도 사용법이 나와있질 않다..
이런 퐝당한..
암튼.. 일반적으로 3차원 이상의 연관배열을 다루려면 좐나 복잡해지기 마련이다.
이럴때 아래와같이 해쉬맵을 맹글어서 활용하면 그나마 시간이 째꼼 단축됨..
<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript">
/*
{
'2006' :
{
'11' : [ '01', '02', '03', '04', '05' ],
'12' : [ '01', '02', '03', '04', '05' ]
},
'2007' :
{
'11' : [ '01', '02', '03', '04', '05' ],
'12' : [ '01', '02', '03', '04', '05' ]
}
}
*/
hashArrayTest1 = function()
{
var hashYear = new Hash();
var hashMonth = new Hash();
var arrayDate = new Array();
arrayDate.push('01');
arrayDate.push('02');
arrayDate.push('03');
arrayDate.push('04');
arrayDate.push('05');
hashMonth.set('11', arrayDate);
hashMonth.set('12', arrayDate);
hashYear.set('2006', hashMonth);
hashYear.set('2007', hashMonth);
alert( hashYear.keys() );
alert( hashYear.get('2007').keys() );
alert( hashYear.get('2007').get('12')[0] );
};
hashArrayTest2 = function()
{
var hashYear = new Hash();
for(var i=2006; i<=2007; i++)
{
var hashMonth = new Hash();
for(var j=1; j<=12; j++)
{
var arrayDate = new Array();
for(var k=1; k<=31; k++) arrayDate.push(k);
hashMonth.set(j, arrayDate);
}
hashYear.set(i, hashMonth);
}
return hashYear;
};
hashYearTest = function()
{
var myHash = hashArrayTest2();
var tmp1 = myHash.get(2007);
var tmp2 = tmp1.get(12);
alert( myHash.length + ' @ ' + myHash.keys() );
alert( tmp1.length + ' @ ' + tmp1.keys() );
alert( tmp2.length + ' @ ' + tmp2[0] );
};
</script>
|
/** 월별 최종일 */
var g_monthlyLastDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
/**
* 날짜객체 생성
* 2007-07-13 김형섭
*
* @return <object, Date>날짜객체
*
*/
getDate = function()
{
return new Date();
};
/**
* 대상 년도가 윤년인지 체크
* 2007-07-13 김형섭
*
* @param <int>p_year 대상 년도
* @return <boolean>윤년 여부
*
*/
isLeapYear = function(p_year)
{
p_year = p_year.toInt();
if((p_year % 4) == 0 || (p_year % 100) != 0 && (p_year % 400) == 0)
return true;
else
return false;
};
/**
* 지정한 길이만큼 숫자 앞에 0을 채움
* 2007-07-13 김형섭
*
* @param <int>length 표현 자리수
* @param <int>source 대상 숫자
* @return <string>string
*
*/
formatZeroString = function(p_source, p_length)
{
var tmp = '';
if(p_source.toInt() == 'NaN') p_source = 0;
for(var i=p_source.toString().length; i<p_length; i++) tmp+= '0';
return tmp + p_source;
};
/**
* 주별 기간 생성 (셀렉트박스 생성시에 사용)
* 2007-07-13 김형섭
*
* @param <string>p_year
* @param <string>p_month
* @return <string, JsonString>기간
*
*/
generateWeekPeriod = function(p_year, p_month)
{
if($type(p_month) == 'number') p_month = p_month.toString();
if(p_month.length == 1) p_month = '0' + p_month;
if(isLeapYear(p_year)) g_monthlyLastDay[1] = 29;
var _theYear = p_year.toInt();
var _theMonth = p_month.toInt();
var _theDate = 1;
var _dateObject = getDate();
_dateObject.setYear(_theYear);
_dateObject.setMonth(_theMonth - 1);
_dateObject.setDate(_theDate);
var dayCountOfWeek = _dateObject.getDay();
var firstSundayInMonth;
if(dayCountOfWeek != 0) firstSundayInMonth = (7-dayCountOfWeek) + 1;
else firstSundayInMonth = _theDate;
_dateObject.setYear(_theYear);
_dateObject.setMonth(_theMonth);
_dateObject.setDate(_theDate - 1);
var lastDayInMonth = _dateObject.getDate();
var maxWeekCount;
if((firstSundayInMonth + 28) <= lastDayInMonth) maxWeekCount = 5;
else maxWeekCount = 4;
_dateObject.setYear(_theYear);
_dateObject.setMonth(_theMonth - 1);
_dateObject.setDate(firstSundayInMonth);
var i = 0;
var result = [];
for(var j=1; j<=maxWeekCount; j++)
{
var startDate = '';
var endDate = '';
var theYear = _theYear.toString();
var theMonth = _theMonth.toInt();
var theDate;
result[i] =
{
'start' : [],
'end' : []
};
// 해당주의 시작일
theDate = firstSundayInMonth + ((j-1) * 7);
theMonth = formatZeroString(theMonth, 2);
theDate = formatZeroString(theDate, 2);
result[i].start =
{
'year' : theYear,
'month' : theMonth,
'date' : theDate
};
// 해당주의 마지막일
theMonth = theMonth.toInt();
theDate = firstSundayInMonth + ((j-1)*7) + 6;
if(theDate > lastDayInMonth)
{
theMonth++;
theDate = theDate - lastDayInMonth;
}
if(theMonth > 12)
{
theYear++;
theMonth = 1;
}
theMonth = formatZeroString(theMonth, 2);
theDate = formatZeroString(theDate, 2);
result[i].end =
{
'year' : theYear,
'month' : theMonth,
'date' : theDate
};
i++;
}
return Json.toString(result);
};
|
|
|
|