ggachi
 

XUL에서 XPCOM 사용시 방법 문의

전체글글쓴이: ggachi » 2006 03 15 18:00 32

XUL 파일이 아래와 같이 있습니다.

아래 XUL에서 XPCOM을 등록하고 사용하는건데요.

XUL의 루트에서 objReal로 XPCOM을 생성했습니다.

여기서 해당 XPCOM의 Add를 수행하면 제대로 잘 됩니다.(temp 변수 저장)

그런데 javascript의 onOK() 함수내에서 루트에서 생성한 objReal을 사용할려고

하면 실패를 하는군요.

try로 생성해서 찍은 오류는
"UnnamedClass 클래스 객체를 생성 거부" 입니다.

왜 안되는지 이해가 안되는군요. 그리고 다른 사용하는 방법이 있는지요?

아시는 분이 도움주시면 감사하겠습니다. ^^


<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<window id="sample" title="Szmple"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox>
<hbox>
<label control="aValue" value="A Number :"/>
<textbox id="aValue" value="2"/>
</hbox>
<hbox>
<label control="bValue" value="B Number :"/>
<textbox id="bValue" value="3"/>
</hbox>
<button id="ok" label="OK" oncommand="doOK()"/>
<button id="cancel" label="Cancel" oncommand="doCancel()"/>
</vbox>

<script type="application/x-javascript">
const cid = "@mydomain.com/XPCOMSample/MyComponent;1";
var objReal;
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var obj = Components.classes[cid].getService()
objReal = obj.QueryInterface(Components.interfaces.IMyComponent);

var temp= objReal.Add(3,4);
}
catch( e ) {
alert(e);
}

function doOK()
{
alert('Performing 3+4. Returned ' + temp + '.');
var aVal = document.getElementById('aValue').value;
var bVal = document.getElementById('bValue').value;
alert(aVal);
alert(bVal);
var res = 0;
if( objReal ) {
alert( objReal );
try {
res = objReal.Add(3, 4);
}
catch( e ) {
alert(e);
}
}
else {
alert("obj not exist!");
}

alert('Performing 3+4. Returned ' + res + '.');
alert("You pressed OK!");
return true;
}

function doCancel()
{
alert("You pressed Cancel!");
window.close();
}
</script>
<description value="Select a button"/>
</window>