ExternalInterfaceはブラウザによって入力される改行コードが異なる

sukesam2008-01-06

ExternalInterface.addCallbackしたメソッドを各ブラウザでコールすると、改行文字が異なって、文字列長が異なる。
調べてみると

ブラウザ 改行コード
IE6 \r\n
FF2 win \n
Opera9 win \r\n
FF2 mac \n
Safari2 mac \n

となっている。

しかも、textFieldに\rを追加したときの挙動がよくわからない。

上のように、期待した通りの結果にならない。本当であれば、dの後にテキストの高さが配置されるんだろうけど、そうはなってない。

だから、ブラウザから入力された\rは排除してあげるよう

ちなみに、上のプログラムのソースは下に記述しておきます

package {
	import flash.display.*;
	import flash.text.*;

	public class Study12CrLf extends Sprite {
		public function Study12CrLf() {
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;

			var format:TextFormat = new TextFormat();
			format.size = 15;
			var textField:TextField = new TextField();
			textField.height = 150;
			textField.defaultTextFormat = format;
			textField.appendText("\\nの場合\n");
			textField.appendText("a\nb\nc\nd\n");
			textField.appendText(textField.textHeight.toString());
			addChild(textField);

			var textField2:TextField = new TextField();
			textField2.height = 150;
			textField2.defaultTextFormat = format;
			textField2.appendText("\\r\\nの場合\r\n");
			textField2.appendText("a\r\nb\r\nc\r\nd\r\n");
			textField2.appendText(textField2.textHeight.toString());
			textField2.x = 80;
			addChild(textField2);
		}
	}
}