2010-10-10 1 views
3

Я пришел сегодня, чтобы показать ошибку, вызванную операцией в JQuery, об объектном преобразовании, вот код (function setColor (x, y)):Ошибка Opera: исключение uncaught: TypeError: невозможно преобразовать 'xxxxxx' в объект

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]+')'; 

А вот ошибка брошена оперы:

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 

Я попытался создать объект как массив (вар colourpixel = новый Array();), но ничего не бежать.

Спасибо заранее!

+0

@Nick «ошибка, вызванная операми» – lonesomeday

+0

@Angelus Почему бы не добавить конечную скобку в регулярное выражение и сделать 'canvascontext.fillStyle = colourpixel [0];'? – lonesomeday

+0

Причина, если я положил; там, есть проблема с синтаксисом, связанная с конвекцией строк? –

ответ

1

Я не уверен, что лучше исправить, так как я не справиться с этой ситуацией цвета на всех, но вот, что проблема:

В опере, когда вы устанавливаете стиль как rgb(...), например:

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

в большинстве браузера для $('#colour').css('background-color') вы получите: "rgb(0, 70, 255)", но это не так в Opera, вы получите шестигранный формат "#0046ff", поэтому ваше регулярное выражение не будет соответствовать и colourpixel будет null, а не массив совпадений. Это приведет к ошибкам, так же, как и null[1].

Here's a quick test to demonstrate this, протестируйте его в любом другом крупном браузере, затем в Opera.