Re: XPCNativeWrapper and getData (application/x-moz-node)
"rvj" <[email protected]> Tue, 25 May 2010 08:10:36 +0100
| Newsgroups | gmane.comp.mozilla.devel.dom |
|---|---|
| Message-ID | <[email protected]> |
> Does appending the security wrapper not work? It should...
nope I get
// Execption ..." Could not convert Javascript argument 0
// [nsIDOMHTMLTableElement.appendChild]" nsresult: "0x80570009
// NS_ERROR_XPC_BAD_CONVERT_JS)"
**********************************************************
xulrunner code (1.9.2)
************************************************************
<?xml version="1.0"?>
<window onload="attach()"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="dragdrop4" style="background:lime;height:600px;width:600px">
<script>
<![CDATA[
function attach()
{
// 1. start
try
{
document.getElementById('source').contentWindow.document.addEventListener("dragstart",onDragStart,false)
}
catch (e)
{
alert(e)
}
// 2. enter
try
{
document.getElementById('target').contentWindow.document.addEventListener("dragenter",onDragEnter,false)
}
catch (e)
{
alert(e)
}
// 3. over
try
{
document.getElementById('target').contentWindow.document.addEventListener("dragover",onDragOver,false)
}
catch (e)
{
alert(e)
}
// 4. drop
try
{
document.getElementById('target').contentWindow.document.addEventListener("drop",onDragDrop,false)
}
catch (e)
{
alert(e)
}
}
function onDragStart(event)
{
// get reference of node to be copied
element=event.target
if (element.tagName=="TD")
{
element=element.parentNode
}
event.dataTransfer.setData('application/x-moz-node',element)
event.dataTransfer.setData('text/plain','this is some text')
event.dataTransfer.effectAllowed="copy"
event.dataTransfer.dropffect="copy"
}
function onDragEnter(event)
{
event.stopPropagation();
event.preventDefault();
}
function onDragOver(event)
{
event.stopPropagation();
event.preventDefault();
}
function onDragDrop(event)
{
element=event.target
if (element.tagName=="TD")
{
element=element.parentNode
}
node=event.dataTransfer.getData("application/x-moz-node");
//alert("node"+node) // [object XPCNativeWrapper [ object
HTMLTableRowElement]]
try
{
//alert(node.tagName)
//alert(node.localName)
//alert("$"+node.getAttribute('id'))
}
catch (e)
{
alert(e)
}
target=document.getElementById('target').contentWindow.document.getElementById('tablenode') try { target.appendChild(node) } catch (e) { alert("error"+e) // Execption ..." Could not convert Javascript argument 0 // [nsIDOMHTMLTableElement.appendChild]" nsresult: "0x80570009 // NS_ERROR_XPC_BAD_CONVERT_JS)" } event.preventDefault(); } ]]> </script> <box flex="1" orient="vertical"> <iframe id="source" type="content" flex="1" src="file2.htm" /> <iframe id="target" type="content" flex="1" src="file1.htm" /> </box> </window>"Boris Zbarsky" <[email protected]> wrote in messagenews:[email protected]...> On 5/24/10 11:43 AM, rvj wrote:>> So ondrop node reports that an HTML table row has been passed but not aswe>> know it!>> Right, you're seeing the security
wrapper for it.>>> What then is the syntax to extract the html node in a XPCNativeWrapper so>> that it can be appended after the target element?>> Does appending the security wrapper not w
ork? It should...>>> alert("node"+node) // [object XPCNativeWrapper [ object>> HTMLTableRowElement]]>> That seems correct.>>> alert(node.tagName) // undefined>> This, however does not.>> -Boris