diff --git a/cocos2d/core/label/CCSGLabelCanvasRenderCmd.js b/cocos2d/core/label/CCSGLabelCanvasRenderCmd.js index 030600f5358..da059f14737 100644 --- a/cocos2d/core/label/CCSGLabelCanvasRenderCmd.js +++ b/cocos2d/core/label/CCSGLabelCanvasRenderCmd.js @@ -118,6 +118,11 @@ return fontDesc; }; + proto._safeMeasureText = function (ctx, string) { + var metric = ctx.measureText(string); + return metric && metric.width || 0; + }; + proto._measureText = function (ctx) { return function(string) { return ctx.measureText(string).width; @@ -176,13 +181,13 @@ totalHeight = 0; for (i = 0; i < paragraphedStrings.length; ++i) { var j = 0; - var allWidth = this._labelContext.measureText(paragraphedStrings[i]).width; + var allWidth = this._safeMeasureText(this._labelContext, paragraphedStrings[i]); textFragment = cc.TextUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, this._measureText(this._labelContext)); while(j < textFragment.length) { - var measureWidth = this._labelContext.measureText(textFragment[j]).width; + var measureWidth = this._safeMeasureText(this._labelContext, textFragment[j]); maxLength = measureWidth; totalHeight += this._getLineHeight(); ++j; @@ -228,8 +233,7 @@ var paragraphLength = []; for (var i = 0; i < paragraphedStrings.length; ++i) { - var textMetric = ctx.measureText(paragraphedStrings[i]); - paragraphLength.push(textMetric.width); + paragraphLength.push(this._safeMeasureText(ctx, paragraphedStrings[i])); } return paragraphLength; @@ -255,7 +259,7 @@ this._splitedStrings = []; var canvasWidthNoMargin = this._canvasSize.width - 2 * this._getMargin(); for (i = 0; i < paragraphedStrings.length; ++i) { - var allWidth = this._labelContext.measureText(paragraphedStrings[i]).width; + var allWidth = this._safeMeasureText(this._labelContext, paragraphedStrings[i]); var textFragment = cc.TextUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, @@ -284,7 +288,7 @@ var canvasSizeX = 0; var canvasSizeY = 0; for (i = 0; i < paragraphedStrings.length; ++i) { - var paraLength = ctx.measureText(paragraphedStrings[i]).width; + var paraLength = this._safeMeasureText(ctx, paragraphedStrings[i]); canvasSizeX = canvasSizeX > paraLength ? canvasSizeX : paraLength; } canvasSizeY = this._splitedStrings.length * this._getLineHeight();