javascriptメモ – 1つのフォーム内の値を複数ページに渡したい場合に刺激されて、そのうち載せようとしていたスクリプトをアップします。カテゴリ「TIPS」も新規作成しておこう。

ie6の2006年4月更新以降、(主に)FLASHコンテンツを再生する際にユーザの1クリックが必要になったため、JavaScriptによる書き出しで回避する。
【参考URL】
http://adobedm.adobe.co.jp/u/No/67662/59CD67E5_1279781/060417001.html
http://adobedm.adobe.co.jp/u/No/67662/59CD67E6_1279781/060417002.html
http://adobedm.adobe.co.jp/u/No/67662/59CD67E7_1279781/060417003.html

<script language="JavaScript">
function convertRunContent() {

if( document.convert.input.value == "" ) {
alert( "<object>タグを入力してください。" );
return;
}
if( document.convert.domain.value == "" ) {
alert( "URLを入力してください。" );
return;
}

var index = 0;
var paramLeft = new Array();
var paramRight = new Array();
var strDomain = ’<script src="http://’ + document.convert.domain.value + ’\/AC_RunActiveContent.js" type="text\/javascript"><\/script>\n’;
var strInput = document.convert.input.value;
var strOutputNoScript = "<noscript>\n";
strOutputNoScript += strInput;
strOutputNoScript += "<\/noscript>\n";
arrayLine = strInput.split("\n");
for( var i = 0; i < arrayLine.length; i++ ) {
if( (! arrayLine[ i ].match("embed") && (! arrayLine[ i ].match("EMBED")) ) ) {
targetLine = arrayLine[ i ].replace( " />", ">" );
targetLine = targetLine.replace( ">", "" );
targetLine = targetLine.replace( "<", "" );
targetLine = targetLine.replace( " = ", "=" );
while( targetLine.match("\"") ) {
targetLine = targetLine.replace( "\"", "" );
}
arrayElement = targetLine.split(" ");
isName = false;
isValue = false;
for( var j = 0; j < arrayElement.length; j++ ) {
if( arrayElement[ j ].match("=") ) {
lenTotal = arrayElement[ j ].length;
leftStart = 0;
leftLen = arrayElement[ j ].indexOf("=");
rightStart = arrayElement[ j ].indexOf("=") + 1;
rightLen = lenTotal - rightStart;
strLeft = arrayElement[ j ].substr( leftStart, leftLen );
strRight = arrayElement[ j ].substr( rightStart, rightLen );
if( strLeft == "name" ) {
paramLeft[ index ] = strRight;
} else if( strLeft == "value" ) {
paramRight[ index ] = strRight;
index++;
} else {
paramLeft[ index ] = strLeft;
paramRight[ index ] = strRight;
index++;
}
}
}
}
}

strOutput = "<script language=’javascript’>\n";
strOutput += "AC_FL_RunContent(\n";
for( var i = 0; i < paramLeft.length; i++ ) {
paramRight[ i ] = paramRight[ i ].replace( ".swf", "" );
strOutput += "\t’" + paramLeft[ i ] + "’,";
if( isNaN(parseInt(paramRight[ i ].charAt( paramRight[ i ].length - 1, 1 ))) ) {
paramRight[ i ] = paramRight[ i ].substr( 0, ( paramRight[ i ].length - 1 ) );
}
strOutput += "’" + paramRight[ i ] + "’";
if( i != paramLeft.length - 1 ) {
strOutput += ",\n";
}
}
strOutput += "\n);\n";
strOutput += "<\/script>\n";
document.convert.output.value = strDomain + strOutput + strOutputNoScript;

if (document.all && navigator.userAgent.match(/windows/i) && document.convert.output.value) {
copy_obj = document.convert.output.createTextRange()
copy_obj.execCommand("Copy")
alert("クリップボードにコピーしました");
}
}

</script>
<form name="convert">

<table>
<tr valign="top">
<td>URL</td>
<td>http://<input type="text" name="domain" value="" style="width: 200px;" />/AC_RunActiveContent.js</td>
<td width="350">Adobe社提供の<a href="http://www.adobe.com/jp/devnet/activecontent/articles/devletter.html" target="_blank">スクリプト(AC_RunActiveContent.js)</a>を参照可能なURL</td>
</tr>
<tr valign="top">
<td><nobr>修正元</nobr></td>

<td colspan="1">
<textarea name="input" cols="70" rows="10"></textarea>
<input type="button" onClick="convertRunContent()" value="↓変換↓" style="width: 200px;" />
</td>
<td>&lt;object&gt;~&lt;/object&gt;を貼り付けてください。</td>
</tr>
<tr valign="top">
<td><nobr>修正後</nobr></td>

<td colspan="1">
<textarea name="output" cols="70" rows="20"></textarea>
</td>
<td>&lt;noscript&gt;も含め全て変換出力します。<br />※Windows + Internet Exploror4~ でのみ、変換実行後に<font color="red">クリップボードに結果を転送</font>します。</td>
</tr>
</table>
</form>