Skip to main content
Known Participant
March 3, 2023
Answered

2 double quotes are converted to 2 single quotes, an error occurs

  • March 3, 2023
  • 3 replies
  • 636 views

var strAlert = "";

2 single quotes:var strAlert = ''; report error:SyntaxError: unterminated string literal

Is there a way to solve

This topic has been closed for replies.
Correct answer Vladin M. Mitov

I think, the MMExecite() method is similar to eval(), so I tested the string with eval() method and the result is the same error - unterminated string literal.
I noticed that you have unescaped "\n" symbols in the alert string. After escaping them, the code works as supposed. Here it is:

 

function onBtnClick( e:MouseEvent ):void{
	var jsfl:String = new String();
	
	jsfl += "var arrLayers = fl.getDocumentDOM().getTimeline().getSelectedLayers();\n var nCurrentFrame = fl.getDocumentDOM().getTimeline().currentFrame;\nalert('Make sure:\\n - the playhead is in a blank frame before your layers start.\\n - you have fully selected your layers (whilst holding SHIFT)');\nvar strOffSet = prompt('Frames to stagger your layers by?');\nvar nOffSet = 5;\nvar nFramesToAdd;\nvar strAlert = '';\ntry\n{\nnOffSet = parseInt(strOffSet);\n}\ncatch(e)\n{\nnOffSet = 5;\n}\nvar nLongestLayer = fl.getDocumentDOM().getTimeline().frameCount + nOffSet;\narrLayers.reverse();\nfor(var i=0; i < arrLayers.length; i++)\n{\nnFramesToAdd = (i+1)*nOffSet;\nfl.getDocumentDOM().getTimeline().currentLayer = arrLayers[i];\nfl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nCurrentFrame);\nnLongestLayer+=nOffSet;\n}\nnLongestLayer-=nOffSet;\nstrAlert = 'Offset ' + i + ' layers by ' + nOffSet + ' frames';\nvar arrAllLayers = fl.getDocumentDOM().getTimeline().layers;\nvar nWhereToAdd;\nfor(var j=0; j < arrAllLayers.length; j++)\n{\nif(arrAllLayers[j].frameCount < nLongestLayer)\n{\nnFramesToAdd = nLongestLayer - arrAllLayers[j].frameCount;\nnWhereToAdd = arrAllLayers[j].frameCount;\nfl.getDocumentDOM().getTimeline().currentLayer = j;\nfl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nWhereToAdd);\n}\n}\nalert(strAlert);";
	
	MMExecute( jsfl );
}

 



3 replies

Vladin M. Mitov
Vladin M. MitovCorrect answer
Inspiring
March 3, 2023

I think, the MMExecite() method is similar to eval(), so I tested the string with eval() method and the result is the same error - unterminated string literal.
I noticed that you have unescaped "\n" symbols in the alert string. After escaping them, the code works as supposed. Here it is:

 

function onBtnClick( e:MouseEvent ):void{
	var jsfl:String = new String();
	
	jsfl += "var arrLayers = fl.getDocumentDOM().getTimeline().getSelectedLayers();\n var nCurrentFrame = fl.getDocumentDOM().getTimeline().currentFrame;\nalert('Make sure:\\n - the playhead is in a blank frame before your layers start.\\n - you have fully selected your layers (whilst holding SHIFT)');\nvar strOffSet = prompt('Frames to stagger your layers by?');\nvar nOffSet = 5;\nvar nFramesToAdd;\nvar strAlert = '';\ntry\n{\nnOffSet = parseInt(strOffSet);\n}\ncatch(e)\n{\nnOffSet = 5;\n}\nvar nLongestLayer = fl.getDocumentDOM().getTimeline().frameCount + nOffSet;\narrLayers.reverse();\nfor(var i=0; i < arrLayers.length; i++)\n{\nnFramesToAdd = (i+1)*nOffSet;\nfl.getDocumentDOM().getTimeline().currentLayer = arrLayers[i];\nfl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nCurrentFrame);\nnLongestLayer+=nOffSet;\n}\nnLongestLayer-=nOffSet;\nstrAlert = 'Offset ' + i + ' layers by ' + nOffSet + ' frames';\nvar arrAllLayers = fl.getDocumentDOM().getTimeline().layers;\nvar nWhereToAdd;\nfor(var j=0; j < arrAllLayers.length; j++)\n{\nif(arrAllLayers[j].frameCount < nLongestLayer)\n{\nnFramesToAdd = nLongestLayer - arrAllLayers[j].frameCount;\nnWhereToAdd = arrAllLayers[j].frameCount;\nfl.getDocumentDOM().getTimeline().currentLayer = j;\nfl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nWhereToAdd);\n}\n}\nalert(strAlert);";
	
	MMExecute( jsfl );
}

 



- Vlad: UX and graphic design, Flash user since 1998Member of Flanimate Power Tools team - extensions for character animation
JoãoCésar17023019
Community Expert
Community Expert
March 3, 2023

Thanks.

 

I cannot test in an actual MMExecute call right now, but running this string in a regular AS3 and HTML5 Canvas document give me no errors.

 

You can break down your string in multiple lines like this so it will be easier for you to spot problems:

var string = "";

string += "var arrLayers = fl.getDocumentDOM().getTimeline().getSelectedLayers();\n";
string += "var nCurrentFrame = fl.getDocumentDOM().getTimeline().currentFrame;\n";
string += "alert('Make sure:\n - the playhead is in a blank frame before your layers start.\n - you have fully selected your layers (whilst holding SHIFT)');\n";
string += "var strOffSet = prompt('Frames to stagger your layers by?');\n";
string += "var nOffSet = 5;\n";
string += "var nFramesToAdd;\n";
string += "var strAlert = '';\n";
string += "try\n";
string += "{\n";
string += "nOffSet = parseInt(strOffSet);\n";
string += "}\n";
string += "catch(e)\n";
string += "{\n";
string += "nOffSet = 5;\n";
string += "}\n";
string += "var nLongestLayer = fl.getDocumentDOM().getTimeline().frameCount + nOffSet;\n";
string += "arrLayers.reverse();\n";
string += "for(var i=0; i < arrLayers.length; i++)\n";
string += "{\n";
string += "nFramesToAdd = (i+1)*nOffSet;\n";
string += "fl.getDocumentDOM().getTimeline().currentLayer = arrLayers[i];\n";
string += "fl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nCurrentFrame);\n";
string += "nLongestLayer+=nOffSet;\n";
string += "}\n";
string += "nLongestLayer-=nOffSet;\n";
string += "strAlert = 'Offset ' + i + ' layers by ' + nOffSet + ' frames';\n";
string += "var arrAllLayers = fl.getDocumentDOM().getTimeline().layers;\n";
string += "var nWhereToAdd;\n";
string += "for(var j=0; j < arrAllLayers.length; j++)\n";
string += "{\n";
string += "if(arrAllLayers[j].frameCount < nLongestLayer)\n";
string += "{\n";
string += "nFramesToAdd = nLongestLayer - arrAllLayers[j].frameCount;\n";
string += "nWhereToAdd = arrAllLayers[j].frameCount;\n";
string += "fl.getDocumentDOM().getTimeline().currentLayer = j;\n";
string += "fl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nWhereToAdd);\n";
string += "}\n";
string += "}\n";
string += "alert(strAlert);";

 

Regards,

JC

JoãoCésar17023019
Community Expert
Community Expert
March 3, 2023

Hi.

 

Both examples using single and double quotes work for me without a problem.

 

Can you provide more details?

 

Also make sure that you're using the standard quotes because sometimes we copy some examples from the Internet but they came with different types of quotes.

 

Regards,

JC

kqskcmAuthor
Known Participant
March 3, 2023
function onBtnClick(e:MouseEvent):void {

var jsfl:String = new String();

jsfl += "var arrLayers = fl.getDocumentDOM().getTimeline().getSelectedLayers();\n var nCurrentFrame = fl.getDocumentDOM().getTimeline().currentFrame;\nalert('Make sure:\n - the playhead is in a blank frame before your layers start.\n - you have fully selected your layers (whilst holding SHIFT)');\nvar strOffSet = prompt('Frames to stagger your layers by?');\nvar nOffSet = 5;\nvar nFramesToAdd;\nvar strAlert = '';\ntry\n{\nnOffSet = parseInt(strOffSet);\n}\ncatch(e)\n{\nnOffSet = 5;\n}\nvar nLongestLayer = fl.getDocumentDOM().getTimeline().frameCount + nOffSet;\narrLayers.reverse();\nfor(var i=0; i < arrLayers.length; i++)\n{\nnFramesToAdd = (i+1)*nOffSet;\nfl.getDocumentDOM().getTimeline().currentLayer = arrLayers[i];\nfl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nCurrentFrame);\nnLongestLayer+=nOffSet;\n}\nnLongestLayer-=nOffSet;\nstrAlert = 'Offset ' + i + ' layers by ' + nOffSet + ' frames';\nvar arrAllLayers = fl.getDocumentDOM().getTimeline().layers;\nvar nWhereToAdd;\nfor(var j=0; j < arrAllLayers.length; j++)\n{\nif(arrAllLayers[j].frameCount < nLongestLayer)\n{\nnFramesToAdd = nLongestLayer - arrAllLayers[j].frameCount;\nnWhereToAdd = arrAllLayers[j].frameCount;\nfl.getDocumentDOM().getTimeline().currentLayer = j;\nfl.getDocumentDOM().getTimeline().insertFrames(nFramesToAdd, false, nWhereToAdd);\n}\n}\nalert(strAlert);\n;";	
		
MMExecute(jsfl);

}