prototype.jsを使うとfor~inがバグる件
下記について知っている人が居ましたら教えてください。
HTAでprototype.jsを使うとfor~inでバグります。
具体的に,
prototype.jsを読み込んだ状態でfor~inして,
for~inの情報を参照すると,値ではなくソースコードが表示されます。
prototype.jsを読み込ませない場合で,通常のようにfor~inして,
for~inの情報を参照すると,問題なく値が参照できます。
OS環境とバージョンによって違うかもしれませんが,僕の環境では現象が発生します。
対策方法を知っている人がいましたら教えてください。
下記のソースを実行すると,
バグらない場合は,次のように出力されます。
hoge
piyo
toge
バグる場合は,次のように出力されます。
function(item, i) { i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; var n = this.slice(0, i).reverse().indexOf(item); return (n < 0) ? n : i - n - 1; }
-略-
{ this._each(function(value) { iterator(value, index++); }); } catch (e) { if (e != $break) throw e; } return this; }
hoge
piyo
toge
prototype.js使用すると...
/////////////////////////////////////
// sample.hta バグ
<html>
<head>
<title>ツール</title>
<script type="text/javascript" src="./prototype.js"></script>
</head>
<body onLoad="javascript:window.resizeTo(600,480)">
<script language="javascript">
{
// Iniイメージ
// [TEST]
// KEY1=hoge
// KEY2=piyo
// KEY3=toge
var section = "TEST";
var key = new Array("KYE1", "KYE2", "KYE3");
var data = new Array("hoge", "piyo", "toge");
// セクション
items = new Array();
items[ section ] = new Array();
// キー
for(var i=0;i<key.length;i++){
items[ section ][ key[i] ] = data[i];
}
// 参照
for(var j in items[ section ]){
document.write( items[ section ][ j ] + "<br />\n" );
}
delete key;
delete data;
delete items;
}
</script>
</body>
</html>
prototype.js使用しないと...
/////////////////////////////////////
// sample.hta バグらない
<html>
<head>
<title>ツール</title>
<!--
<script type="text/javascript" src="./prototype.js"></script>
-->
</head>
<body onLoad="javascript:window.resizeTo(600,480)">
<script language="javascript">
{
// Iniイメージ
// [TEST]
// KEY1=hoge
// KEY2=piyo
// KEY3=toge
var section = "TEST";
var key = new Array("KYE1", "KYE2", "KYE3");
var data = new Array("hoge", "piyo", "toge");
// セクション
items = new Array();
items[ section ] = new Array();
// キー
for(var i=0;i<key.length;i++){
items[ section ][ key[i] ] = data[i];
}
// 参照
for(var j in items[ section ]){
document.write( items[ section ][ j ] + "<br />\n" );
}
delete key;
delete data;
delete items;
}
</script>
</body>
</html>
prototype.jsを最後に読み込ませると...
/////////////////////////////////////
// sample.hta バグらない
<html>
<head>
<title>ツール</title>
</head>
<body onLoad="javascript:window.resizeTo(600,480)">
<script language="javascript">
{
// Iniイメージ
// [TEST]
// KEY1=hoge
// KEY2=piyo
// KEY3=toge
var section = "TEST";
var key = new Array("KYE1", "KYE2", "KYE3");
var data = new Array("hoge", "piyo", "toge");
// セクション
items = new Array();
items[ section ] = new Array();
// キー
for(var i=0;i<key.length;i++){
items[ section ][ key[i] ] = data[i];
}
// 参照
for(var j in items[ section ]){
document.write( items[ section ][ j ] + "<br />\n" );
}
delete key;
delete data;
delete items;
}
</script>
<script type="text/javascript" src="./prototype.js"></script>
</body>
</html>
お礼
ありませんか。。。 乙です