반응형

출처: XML 원리와 응용, 홍성용, 한빛미디어

http://www.w3schools.com/dom/dom_errors_crossbrowser.asp

https://xhr.spec.whatwg.org/#the-open%28%29-method

http://joy2284590.blogspot.kr/2013/10/java-jsp.html





	
		Choa
		26
		Korean
	

        var objDoc;
	var browser = navigator.userAgent.toLocaleLowerCase();
	
	// document.write(browser); // Check the browser information
	
	if (browser.indexOf('firefox') != -1) {
		objDoc = document.implementation.createDocument("", "", null);
		objDoc.async = false;
		objDoc.load("ex.xml");
	} else if (browser.indexOf('trident') != -1) {
		objDoc = new ActiveXObject("MSXML.DOMDocument");
		objDoc.async = false;
		objDoc.load("ex.xml");
	} else {
		// Chrome, Safari, Opera
		xhttp = new XMLHttpRequest();
		xhttp.open("GET", "ex.xml", false); // https://xhr.spec.whatwg.org/#the-open%28%29-method
		xhttp.send();
		objDoc = xhttp.responseXML;
	}
	
	// Extract the highest node's information and print it using message window
	var objRootNode;
	objRootNode = objDoc.documentElement;
	alert("nodeName: " + objRootNode.nodeName + 
			"\n nodeValue: " + objRootNode.nodeValue + 
			"\n nodeType: " + objRootNode.nodeType);






그냥 XML 파싱하는 평범한 예제였으나, 뭔가 더 붙이다보니 이런 모양이 되었다.

원래 책에는 익스플로러의 것만 나와있었다.(문제는 그걸 익스플로러라고 안 해줘서...)


여튼 그래서 내 브라우저인 파이어폭스에 맞는 걸 찾는다고 시간을 보냈다.

그래서 찾은 것이 else 부분이었으나, 실행은 되는데

메인 스레드에서의 동기화는 위험에서 곧 사라질 거라나 뭐라나.

open() 메소드의 false가 문제인데, 저걸 그렇다고 비동기화를 시키면 objDoc에 들어가지를 않는다.

크롬에서도 같은 반응을 보이길래 찾기는 해야겠단 생각이 들었다.


그런고로 파이어폭스에서 되는 코드는 찾았으나, 문제는 이게 크롬과 익스프롤러에서 안 되었다.

익스플로러는 파서를 다른 거 써서 그렇다고 하더라도

크롬이 안 되는 것이 이상해서 더 찾아봤으니 찾아보진 못 했다.


그래서 크롬의 경우에는 그냥 기존의 코드를 사용하기로 했다.

그리고 사파리의 경우도 크롬과 마찬가지였고(경고 메시지는 없었다.),

오페라는 크롬과 사파리의 것을 사용하는지 정보가 같다고 나왔었다.

(크롬에서 경고가 뜨기 때문인지 오페라도 경고 메시지가 나왔다.)


일단 소스 설명을 해보자면 위의 XML을 파싱하는 소스로

browser 변수를 통해 브라우저 정보를 얻어온 후 

정보에 'firefox'가 있으면 파이어폭스 브라우저용으로 가게했다.


그리고 파이어폭스가 아니고 'trident'라면 익스프롤러 쪽으로 가게끔 했다.

이것도 IE 10까지는 원래 'msie'였으나 내껀 IE 11이라 인식이 안 되었다.

그래서 'trident'로 바꾸었다.

이 trident도 IE 8에서부터 있다고 하더라.

(아직까지 IE 6을 쓴다면 좆잡고 반성해야 한다는 게 내 생각이긴 하지만...)


그리고 나머지는 크롬과 사파리인데 앞에도 말했지만 그냥 별 수 없이 기존의 소스를 사용.


다음은 documentElement 속성을 이용해 XML 문서의 첫 번째 노드(여기서는 students)를 읽어오고

그 노드의 이름, 값, 타입을 보여준다.


여튼 이거 하면서 대충 하고 쉬어야겠다는 내 꿈은 휴지통으로 사라졌다.

반응형
Posted by 애콜라이트
l

free counters