2010-01-17 2 views
1

Dans mon script Greasemonkey, lorsque j'obtiens un handle sur un HTMLImageElement que je veux utiliser avec un canevas HTML, j'obtiens l'erreur suivante dans la console d'erreur de Firefox (Je suppose que c'est parce qu'il est enfermé dans un XPCNativeWrapper) :Problèmes d'utilisation de HTML Canvas & Greasemonkey impossible de dessinerImage() sur le contexte 2D

Error: Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) 
     [nsIDOMCanvasRenderingContext2D.drawImage] 

Mettre GM_log() déclarations tout au long de mon code, j'ai tracé l'objet image que je suis en train d'utiliser à partir de son affectation initiale par jusqu'à ce que j'essaie d'utiliser avec un canevas HTML.

Il est toujours enveloppé dans un XPCNativeWrapper:

[object XPCNativeWrapper [object HTMLImageElement]] 

J'ai déballé le HTMLImageElement en obtenant référence avec image.wrappedJSObject.

Mon code de toile:

var canvas = document.createElement("canvas"); 
canvas.width = image.width; 
canvas.height = image.height; 

var ctx = canvas.getContext("2d"); 
ctx.drawImage(image, 0, 0); 

Toutes les idées pourquoi Firefox est de lancer le code de défaillance d'un composant ci-dessus?

+0

Je n'ai pas apposé cet élément de toile au DOM/corps - ce serait poser un problème? –

+0

En regardant un autre exemple de code, j'ai essayé 'unsafeWindow.document.createElement (" canvas ")' mais je n'ai jamais réussi à le faire fonctionner correctement. Changé mon approche, un peu plus clumsey, re-demandé l'image via AJAX avec le type MIME forcé à "texte" pour lire les données d'image. –

+0

Je ne peux pas reproduire un bug, parce que je ne sais pas ce qu'est 'image'. – NVI

Répondre

1

J'aurais dû regarder de plus près sur Google.

image.wrappedJSObject; 

Travaux.

0
var canvas = document.createElement("canvas").wrappedJSObject, 
ctx = canvas.getContext("2d"); 

canvas.width = image.width; 
canvas.height = image.height; 

ctx.drawImage(image, 0, 0); 

c'est ce que j'ai fait. J'espère que ça aide

+0

Je viens d'essayer avec FF 4.0.1. L'objet DOM de la toile créé de cette manière n'a pas cette propriété "wrappedJSObject". Étiez-vous en utilisant FF. Quelle version? –

+0

Il devrait fonctionner dans le contexte Greasemonkey, pas dans le contexte de Firefox. – w35l3y

0

J'ai juste eu le même problème. L'erreur est partie lorsque j'ai utilisé une URL absolue/complète pour l'image. En outre, comme quelqu'un d'autre l'a noté, assurez-vous que l'image est chargée tout d'abord, ou créez simplement une nouvelle image() en javascript tout d'abord.

Questions connexes