ブラウザ入力をスクリプトで自動化 その2

以前に書いたid:murasuke:20051011に不具合が・・・
form内に同一のname属性がある場合を全く考慮していませんでした・・・orz

同一のname属性がある場合でもきちんと動く修正版ソースです


#<select>に対するfrm.all[tag.name].lengthの不思議な挙動にはまった・・・

 scr.value = "";
 
 var selNm = "";
 var selIdx = 0;
 var aryIdx = "";
 
 var nameHash = new Array();
 
 dall = "all['";
 var end = ";\r\n";
 for( i = 0; i < par.document.forms.length; i++ )
 {
     frm = par.document.forms[i];
     for( j = 0; j < frm.all.length; j++ )
     {
         tag = frm.all[j];
         if( tag.type != undefined )
         {
             if( frm.all[tag.name] != undefined && 
                 frm.all[tag.name].length >= 2 && 
                 frm.all[tag.name][0].type == tag.type )    // selectのname属性が1つの場合と2つの場合で動作が異なるので回避
             {
                 if( nameHash[tag.name] == undefined )
                 {
                     nameHash[tag.name] = 0;
                 }
                 aryIdx = "[" + nameHash[tag.name] + "]";
                 nameHash[tag.name] += 1;
             }
             else
             {
                 aryIdx = "";
             }
             
             if( tag.type == "text" ||  tag.type == "textarea" )
             {
                 scr.value +=  dall + tag.name + "']" + aryIdx + ".value = '" + tag.value.replace(/\r\n/g, '\\r\\n') + "'" + end;
             }
             else if( tag.type == "checkbox" ||  tag.type == "radio" )
             {
                 scr.value +=  dall + tag.name + "']" + aryIdx + ".checked = " + tag.checked + end;
             }
             else if( tag.type == "select-one" || tag.type == "select-multiple" )
             {
                 selIdx = 0;
                 selNm = tag.name; 
             }
         }
         else
         {
              if( tag.tagName == "OPTION" )
              {
                   scr.value +=  dall + selNm + "']" + aryIdx + ".options[" + selIdx++ + "].selected = " + tag.selected + end;
              }
         }
     }
 }