2017-05-02 103 views
0

我有一個函數來轉換我的科爾多瓦應用程序上的base64圖像中的文本。它工作正常,但是在少數設備中,腳本中存在意外的令牌錯誤。解決未捕獲的語法錯誤:意外的令牌>

這裏的功能:

function socialShare(message, font) { 
    var y = 12; 
    var x = 18; 
    var canvas = document.getElementById("receipt"); 
    var context = canvas.getContext("2d"); 

    // calcula a largura da string mais larga 
    context.font = font; 
    var maxStrWidth = message.map(e => { 
     return context.measureText(e).width; 
    }).sort((a, b) => { 
     return b - a; 
    }); 

    // configura a largura do canvas dinamicamente 
    canvas.width = maxStrWidth[0] + 9; 
    canvas.height = x * message.length; 

    // seta a cor do background do canvas 
    context.fillStyle = "#ffffe6"; 
    context.fillRect(0, 0, canvas.width, canvas.height); 

    // escreve o texto 
    context.font = font; 
    context.fillStyle = "#000"; 
    message.forEach(e => { 
     context.fillText(e, 3, y); 
     y += x; 
    }); 

    // gera a string base64 
    let base64 = canvas.toDataURL("image/jpeg", 1); 

    // chamada do plugin social share 
    window.plugins.socialsharing.share(
     null, 
     'Comprovante de Aposta', 
     base64, 
     null 
    ); 
} 

的錯誤是在VAR maxStrWidth線拋出。你看到有什麼問題嗎?

+1

看來這些設備不支持脂肪的箭頭語法。嘗試在該行上方的某處添加一個空的胖箭頭函數,看看它是否在新行上出錯。哪些設備/瀏覽器會失敗? – Brennan

+0

這個錯誤出現在一堆不同的設備上,但它們大部分是4.X.X,並且很少有5.5.1 Android。我正在使用Chrome Inspect調試應用程序。 –

回答

1

並非所有設備都支持ES6箭頭功能,對於使用舊版Chrome瀏覽器版本的舊版Android版本尤其如此。

如果您打算支持較舊的設備,最好使用標準函數聲明。

延伸閱讀這裏:

https://strongloop.com/strongblog/an-introduction-to-javascript-es6-arrow-functions/

+0

我改變了標準聲明: message.forEach(e = function(){ context.fillText(e,3,y); y + = x; }); 現在我得到:** ReferenceError:無效的賦值左邊** –

+0

這是因爲您的forEach函數的語法錯誤。 e = function()應該改爲function(e){},這樣在函數e中就是當前的消息值。 –

+0

像這樣傳遞函數參數? (函數(e){ context.fillText(e,3,y); y + = x; }); –

相關問題