EDITXML을 XMLHttprequest의 응답으로 바꿉니다.
내 질문에 대한 모든 수정 사항과 함께 상당히 길어졌습니다. 그래서 좀 더 짧게하고 더 쉽게 따르도록하겠습니다.
XULRunner를 사용하여 XUL 응용 프로그램을 작성하고 있습니다. 더미 XUL 페이지를로드 한 다음 XMLHttprequest
을 사용하여 내 서버 (로컬 ampps 서버)에서 모든 것을로드합니다. PHP를 사용하여 모든 실제 작업을 수행합니다. PHP가 XML Content-Type
헤더를 설정하고 모든 출력 데이터의 형식을 XML로 지정합니다.
다음은 XMLHttprequest
및 응답을 처리하는 JavaScript 함수의 모양입니다.
function RequestData()
{
if (window.XMLHttpRequest)
{
var url = 'newmenu.xml';
var request = new XMLHttpRequest();
}
else
{
var url = 'http://localdomain.prog/';
var request = Components.classes['@mozilla.org/xmlextras/xmlhttprequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest);
}
request.onload = function(aEvent)
{
var xmlDoc = aEvent.target.responseXML;
var oldmenu = document.getElementById('menubarwrapper');
oldmenu.parentNode.replaceChild(xmlDoc.documentElement, oldmenu);
};
request.onerror = function(aEvent)
{
window.alert("Error Status: " + aEvent.target.status);
};
request.open('POST', url, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send('pageid=menu');
}
RequestData()
onload
이벤트를 호출합니다.
내 원래 코드는 아무 것도하지 않는 것처럼 보였지만, 연구하고 테스트 한 결과 XULRunner는 오류 콘솔에 오류를 표시했습니다. 궁극적으로 그것은 내가 현재 가정하고있는 버전으로 작동하지만 버전을 알지 못했습니다.
오류 콘솔이 메시지를 알리 (그리고 여전히)
경고했다
: 창 요소에 대한 XUL 상자가 인라인 도구 상자 아이를 포함, 모든 아이를 강제는 블록에 싸여있다.
내 코드가 작동하는지 확인하려면 Firefox에 넣어야합니다. 따라서 if (window.XMLHttpRequest)
의 이유는 Firefox와 XULRunner를 사용하여 테스트 할 수 있기 때문입니다. 그런 다음 Firefox에서 로컬 파일 인 XMLHttprequest
이 로컬 파일 인 경우에도 원격 파일을로드 할 수 없으므로 PHP에서 생성 한 XML을 가져 와서 로컬 파일을 만들었습니다.
위의 코드는 XML을 가져오고 <menubar id="menubarwrapper">...</menubar>
을 대체합니다. 그러나 Firefox와 XULRunner 모두 메뉴가 사라집니다. Firebug를 사용하면 모든 요소를 볼 수 있지만 더 이상 볼 수없는 이유는 나를 넘어서고 Firebug 콘솔에는 오류가 없습니다. 이것은 내가 지금 당황한 곳이다.
다음은 어떤 용도로든로드하는 더미 XUL 파일의 복사본입니다.
<?xml version="1.0"?>
<?xml-stylesheet href="main.css" type="text/css"?>
<window id="main" title="My App" width="1000" height="800" sizemode="maximized" orient="vertical" persist="screenX screenY width height" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript" src="main.js"/>
<toolbox id="toolboxwrapper">
<menubar id="menubarwrapper">
<menu id="file-menu" label="File" accesskey="F">
<menupopup id="file-popup">
<menuitem label="Refresh" funcname="RefreshWin"/>
<menuitem label="Open Window" funcname="OpenWin" acceltext="Ctrl+O" accesskey="O" />
<menuseparator/>
<menuitem label="Exit" funcname="ExitProg"/>
</menupopup>
</menu>
<menu id="edit-menu" label="Edit" accesskey="E">
<menupopup id="edit-popup">
<menuitem label="Undo"/>
<menuitem label="Redo"/>
</menupopup>
</menu>
</menubar>
</toolbox>
</window>
내 PHP가 생성하는 XML
은 매우 긴하지만, 기본적으로는 위의 유사 자식의 모든 요소를 가진<menubar>
요소이지만, 더 많은
<menu>
및
<menuitem>
요소.
[DOM Inspector] (https://addons.mozilla.org/firefox/addon/dom-inspector-6622/)를 수정하여 문서 DOM이 수정 된 모양을 확인하십시오. 어떤 요소가''''xmlDoc.documentElement''''입니까? – Kashif
@Kashif - DOM 검사기를 사용하지는 않았지만로드 한 후, 언뜻보기에 방화 벽에있는 것과 비슷한 정보가 나타납니다. 나는 firebug가 출력하고있는 것을보기 위해 Firefox에서 테스트를 만들었습니다. 자세한 내용은 내 두 번째 편집을 참조하십시오. – Krik
@Kashif - 질문에 대한 답을 잊어 버렸습니다. xmlDoc.documentElement는 PHP – Krik