Операционная ошибка: необработанное исключение: ошибка типа: невозможно преобразовать xxxxxx в объект - PullRequest
3 голосов
/ 10 октября 2010

Я пришел сегодня, чтобы показать ошибку, выданную оперой в Jquery, о преобразовании объекта, вот код (функция setColor (x, y)):

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

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

Заранее спасибо!

1 Ответ

1 голос
/ 10 октября 2010

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

В опере, когда вы устанавливаете стиль как 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].

Вот быстрый тест, чтобы продемонстрировать это , протестируйте его в любом другом крупном браузере, затем в Opera.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...