Envoyé par : papy
Date : 30/06/2006 17:05
Bonjour,
j'essai de faire du drag and drop avec des objets javascript que j'ai crée, mais lors du drop j'ai une erreur quand j'essai de lire ces données :
Error: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsITransferable.getAnyTransferData] Source file: chrome://global/content/nsDragAndDrop.js Line: 88
En cherchant dans le code de ce fichier, j'ai vu de nombreux appels à des composants XPCOM et à des objets implémentant des interfaces particulières (entre autre nsITransferable), alors j'ai plusieurs questions:
Envoyé par : papy
Date : 12/10/2006 17:33
Je rafraichis un coup ce post car j'ai trouvé des informations supplémentaire (enfin je comprend plus de chose maintenant :p) mais toujours pas de solution...
Pour intialiser une session de Drag&Drop, on doit utiliser entre autre un composant de type nsITransferable et affecter les données à l'aide la méthode setTransferData
A ce niveau j'ai deux soucis :
XPCOM IDL allows you to pass parameters of certain types only (e.g., string, integer), in addition to objects with XPCOM interfaces (e.g., nsISupports). In order to pass anything else (e.g., a Javascript array, a Java object) from the client of a Javascript-based XPCOM component into the component, you need to wrap the object to be passed in another XPCOM object implemented using Javascript: function WrapperClass(object) { this.wrappedJSObject = this; this.object = object; } WrapperClass.prototype = { QueryInterface : function(iid) { if (!iid.equals(Components.interfaces.nsISupports)) { throw Components.results.NS_ERROR_NO_INTERFACE; } return this; } } Now you can call the first XPCOM component passing in any kind of object by wrapping it first: theComponent.foo(new WrapperClass(theObject)) And inside foo(), the wrapped object can be retrieved as follows: foo : function(arg) { var theActualObject = arg.wrappedJSObject.object; } In the interface definition of theComponent (in your IDL file), you need to declare that foo() takes an nsISupports parameter.
Ca ne change pas le problème, je fais mon appel comme suit :
trans.setTransferData('app/test1', new WrapperClass(monObjet), 0)
j'obtient toujours la même erreur lorsque j'essai de récupérer les données :
var dataObj = new Object(); var bFlavor = new Object(); var len = new Object(); trans.getAnyTransferData(bFlavor, dataObj, len); ----- [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsITransferable.getAnyTransferData]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///tmp/ dnd.js :: anonymous :: line 203" data: no]
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.