2010-10-10 27 views
3

Je viens aujourd'hui pour montrer une erreur lancée par l'opéra dans Jquery, sur la transformation de l'objet, voici le code (fonction setColor (x, y)):Opera erreur: exception Uncaught: TypeError: Impossible de convertir 'xxxxxx' en objet

colourpixel = $('#colour').css('background-color').match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);//["rgb(0, 70, 255", "0", "70", "255"] 

var canvas = document.createElement('canvas'); 
canvas.height=190; 
canvas.width=190; 
canvascontext = canvas.getContext("2d"); 
defaultdata = $('#light').get(0).getContext("2d").getImageData(0,0,190,190); 
canvascontext.putImageData(defaultdata,0,0); 

canvascontext.globalCompositeOperation = 'destination-atop'; 
canvascontext.fillStyle='rgb('+colourpixel[1]+', '+colourpixel[2]+', '+colourpixel[3]+')'; 

Et voici l'erreur lancée par l'opéra:

Uncaught exception: TypeError: Cannot convert 'colourpixel' to object 
Error thrown at line 157, column 1 in setColor(x, y) in file://localhost/home/angelus/Desarrollo/webs/ColorP/functions.js: 
    canvascontext.fillStyle='rgb('+colourpixel[1]+', '+colourpixel[2]+', '+colourpixel[3]+')'; 
called from line 61, column 2 in <anonymous function>(event) in file://localhost/home/angelus/Desarrollo/webs/ColorP/functions.js: 
    setColor(x,y); 
called from line 55, column 294 in <anonymous function: handle>(a) in file://localhost/home/angelus/Desarrollo/webs/ColorP/jquery.min.js: 
    i=i.handler.apply(this,arguments); 
called via Function.prototype.apply() from line 49, column 569 in <anonymous function: o>() in file://localhost/home/angelus/Desarrollo/webs/ColorP/jquery.min.js: 
    return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w 

J'ai essayé de créer l'objet comme un tableau (var colourpixel = new Array();) fuoco rien.

Merci d'avance!

+0

@Nick "l'erreur lancée par l'opéra" – lonesomeday

+0

@Angelus Pourquoi ne pas ajouter le crochet final à l'expression régulière et faire 'canvascontext.fillStyle = colorpixel [0];'? – lonesomeday

+0

Cause si je mets un; là, il y a un problème de sintaxe largeur de la conection de chaîne non? –

Répondre

1

Je ne suis pas sûr que la meilleure solution car je ne traite pas avec cette situation de couleur du tout, mais est ici que le problème est:

Dans l'opéra lorsque vous définissez un style comme rgb(...), par exemple:

<div id="colour" style="background-color: rgb(0, 70, 255);">​ 

dans la plupart navigateur est pour $('#colour').css('background-color') vous obtiendrez: "rgb(0, 70, 255)", mais ce n'est pas vrai dans Opera, vous aurez un format hexadécimal de "#0046ff", de sorte que votre regex ne correspondra pas à et colourpixel serez null, pas tableau d'allumettes. Cela provoque vos erreurs, le même que null[1].

Here's a quick test to demonstrate this, testez-le dans n'importe quel autre navigateur majeur, puis Opera.