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