トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ExternalInterfaceと16進数文字列のキーでエラー
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
奥村 典史
Åê¹ÆNo.47845
投稿日時: 2011-8-2 16:14
常連
居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都)
投稿: 69
使用環境:
FlashCS5.5,
WinXP,Win7(64bit),

単体テスト用に
FlexSDK3.4,
As3Unit

エディター
FlashBuilder5

スクリプト
ActionScript3.0
ExternalInterfaceと16進数文字列のキーでエラー
16進数の文字列をキーにしたオブジェクト{"0f": 100}みたいなのをExternalInterfaceに引数として渡すと何故か失敗してしまいます。

{"0x0f": 100}などなら成功します。
なぜキーが数字に変換されているのでしょうか??

0始まりの文字列をキーにできないという仕様がどこかにあるでしょうか?


何かこの現象について知っている人がいらっしゃいましたら
教えてくださると幸いです。



#あるJsonファイルを読み込んでJavaScriptに渡したいのですが、この問題が発生して困っています。
#元ファイルは訳あって変えることができません。
#Flash内で変換するしか無いのかなぁ・・・



package  {
	
	import flash.display.MovieClip;
	import flash.external.ExternalInterface;
	
	
	public class ExTest extends MovieClip {
		
		
		public function ExTest() {
			ExternalInterface.call("function(param){}", {"0f": 100});
		}
	}
	
}
ひろゆき
Åê¹ÆNo.47846
投稿日時: 2011-8-2 16:23
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: ExternalInterfaceと16進数文字列のキーでエラー
ActionScriptのバージョンくらいは示しましょう。

trace(0xFF);
trace(010);
trace("0F");
などで確認してください。

AS2.0では、確か「0」先頭の数値は8進法で扱われたはずです。

また、文字列を数値として処理しているのは、JavaScript側の可能性もあるのでは?


----------------
質問する際は、回答者に具体的な情報を与えてください。

野中文雄
Åê¹ÆNo.47847
投稿日時: 2011-8-2 17:35
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ExternalInterfaceと16進数文字列のキーでエラー
ECMAScriptの「識別子」は、頭に数字が使えません。
引用:
piggestさんは書きました:
16進数の文字列をキーにしたオブジェクト{"0f": 100}みたいなのをExternalInterfaceに引数として渡すと何故か失敗してしまいます。
...[中略]...
0始まりの文字列をキーにできないという仕様がどこかにあるでしょうか?


----------------
 

奥村 典史
Åê¹ÆNo.47848
投稿日時: 2011-8-2 17:41
常連
居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都)
投稿: 69
使用環境:
FlashCS5.5,
WinXP,Win7(64bit),

単体テスト用に
FlexSDK3.4,
As3Unit

エディター
FlashBuilder5

スクリプト
ActionScript3.0
Re: ExternalInterfaceと16進数文字列のキーでエラー
回答ありがとうございます

引用:
ActionScriptのバージョンくらいは示しましょう。



ごめんなさい。AS3です。
(自分のプロフィールに書いてあるものと勝手に思い込んでました)


trace(0xFF);
trace(010);
trace("0F");


についても試してみました。
なるほど。AS2では真ん中は8になりますね。
知らなかったです。

AS3では大丈夫(真ん中は10)のようでした。


しかしながら、文字列で指定してある所が数字に変わってしまう・・・
というのは Flashのみの状態で再現できませんでした。



引用:
また、文字列を数値として処理しているのは、JavaScript側の可能性もあるのでは?


ご指摘いただいた点も調査してみました。
こちらで見てみたところ、
数字に変換される事はなく、キーが文字列の状態でログが出ました。

{"0xff":100};
{"0f":100};
{"f":100};
{f:100};
{0xff:100};
→成功


ただ、以下のケースで失敗しました。

{0f:100};
→失敗
javaScriptのエラー Uncaught SyntaxError: Unexpected token ILLEGAL
※よく見てみるとこちらのFlashからExternalInterfaceを通した直後同じログが出ていました。



引用:

<html>
<head>
<title>サンプル</title>
</head>
<body>
<script type="text/javascript">
<!--
//※console.logが無い所(IE・ファイアーバグが無いFireFox)では動きません。
obj = {0xff:100};
console.log(obj);
// -->
</script>
</body>
</html>



以上の事からやはりExternalInterfaceを通す時に
何らかの変換が走ってしまっているように思います。
(なんとなく""を付けずに文字列にしてしまっているのかなぁ・・・と思いますが)
奥村 典史
Åê¹ÆNo.47849
投稿日時: 2011-8-2 18:16
常連
居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都)
投稿: 69
使用環境:
FlashCS5.5,
WinXP,Win7(64bit),

単体テスト用に
FlexSDK3.4,
As3Unit

エディター
FlashBuilder5

スクリプト
ActionScript3.0
Re: ExternalInterfaceと16進数文字列のキーでエラー
>野中文雄さん
JavaScriptで識別子名として扱われると、エラーが吐かれるようですね。

しかしながら、識別子になってしまっているのが困りものですね。
文字列のキーならば0始まりは問題ないのを確認しました。
とすると、どこかで文字列が識別子に変換されている様に思います。


回答ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops