【发布时间】:2010-10-10 10:45:18
【问题描述】:
我今天来展示一个Jquery中opera抛出的错误,关于对象转换,代码如下(函数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]+')';
这里是opera抛出的错误:
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(); )但没有运行。
提前谢谢你!
【问题讨论】:
-
@Nick "opera 抛出的错误"
-
@Angelus 为什么不将最后一个括号添加到正则表达式并执行
canvascontext.fillStyle = colourpixel[0];? -
因为如果我放一个 ;那里,有一个sintax问题宽度字符串连接没有?
-
@lonesomeday - 哇错过了没有大写字母的情况,是的,Opera 会将其转换为
#XXXXXX十六进制格式,它不会返回原始的rgb(...)格式,所以你得到了null用于此处的比赛。 -
@Angelus - 在“Opera”中,问题出在 Opera 中,当你说
background-color: rgb(0, 70, 255);时,你会从.css('background-color')得到的是#0046ff,而不是原始格式......所以你的正则表达式不匹配,colourpixel是null。
标签: javascript jquery css opera uncaught-exception