2009/02/02
// [概要]
// - Flashでボタン生成 → ボタンを押すとクリップボードに値が代入される
// - FlashPlayer10対応
// [詳細]
// - パラメーター
// -- label = ボタンのラベル
// -- value = ボタンを押した時にクリップボードに代入される値
// -- htmlid = ボタンを押した時にクリップボードに代入される値を持ったタグのID (htmlid.value || htmlid.innerHTML)
// -- js = ボタンを押した時に実行されるJavaScript 戻り値がクリップボードに代入される
// -- 重複時の優先度:js > htmlid > value
// - HTML
// -- JavaScriptが無効になっている可能性を考えると、SWFObject+noscriptタグを使うか、常にvalueを指定しておいた方が良いかと思われます。
// -- objectタグのid属性値と、embedタグのname属性値にはexternalが必ず要るようです(InternetExplorerの仕様らしい)
// -- パラメーターはFlashVars でも QueryString でも多分OK
サンプル1 パラメーターで直接指定
<object id="external_setclipboard1" width="120" height="22" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="movie" value="setClipboard10.swf" />
<param name="FlashVars" value="value=サンプル1" />
<param name="quality" value="high" />
<param name="bgcolor" value="#FFFFFF" />
<param name="allowScriptAccess" value="sameDomain" />
<embed name="external_setclipboard1" width="120" height="22" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
src="setClipboard10.swf"
FlashVars="value=サンプル1"
quality="high"
bgcolor="#FFFFFF"
allowscriptaccess="sameDomain"
/>
</object>
サンプル2 タグの値を使用(JavaScript必須)
サンプル2
<span id="sample2" style="display:none">サンプル2</span>
<object id="external_setclipboard2" width="120" height="22" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="movie" value="setClipboard10.swf" />
<param name="FlashVars" value="htmlid=sample2" />
<param name="quality" value="high" />
<param name="bgcolor" value="#FFFFFF" />
<param name="allowScriptAccess" value="sameDomain" />
<embed name="external_setclipboard2" width="120" height="22" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
src="setClipboard10.swf"
FlashVars="htmlid=sample2"
quality="high"
bgcolor="#FFFFFF"
allowscriptaccess="sameDomain"
/>
</object>
javascript:document.getElementById('sample2').innerHTML='hoge';eval()
javascript:document.getElementById('sample2').innerHTML='ほげ';eval()
サンプル3 textarea使用(JavaScript必須)
<textarea id="sample3">サンプル3</textarea>
<object id="external_setclipboard3" width="120" height="22" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="movie" value="setClipboard10.swf" />
<param name="FlashVars" value="htmlid=sample3&label=コピー" />
<param name="quality" value="high" />
<param name="bgcolor" value="#FFFFFF" />
<param name="allowScriptAccess" value="sameDomain" />
<embed name="external_setclipboard3" width="120" height="22" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
src="setClipboard10.swf"
FlashVars="htmlid=sample3&label=コピー"
quality="high"
bgcolor="#FFFFFF"
allowscriptaccess="sameDomain"
/>
</object>
サンプル4 select使用(JavaScript必須)
<select id="sample4" multiple="multiple">
<option>1</option>
<option value="option2!" selected="selected">2</option>
<option>3</option>
</select>
<object id="external_setclipboard4" width="120" height="22" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="movie" value="setClipboard10.swf" />
<param name="FlashVars" value="htmlid=sample4&label=COPY" />
<param name="quality" value="high" />
<param name="bgcolor" value="#FFFFFF" />
<param name="allowScriptAccess" value="sameDomain" />
<embed name="external_setclipboard4" width="120" height="22" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
src="setClipboard10.swf"
FlashVars="htmlid=sample4&label=COPY"
quality="high"
bgcolor="#FFFFFF"
allowscriptaccess="sameDomain"
/>
</object>
innerHTML より value 優先 複数選択した場合、\r\nで区切ります。
サンプル5 JavaScript使用(JavaScript必須)
<script type="text/javascript">
function sample5() {
alert(5);
return new Date() +"\r\n"+ (5*25);
}
</script>
<object id="external_setclipboard5" width="120" height="22" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="movie" value="setClipboard10.swf" />
<param name="FlashVars" value="js=sample5()&label=COPY" />
<param name="quality" value="high" />
<param name="bgcolor" value="#FFFFFF" />
<param name="allowScriptAccess" value="sameDomain" />
<embed name="external_setclipboard5" width="120" height="22" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
src="setClipboard10.swf"
FlashVars="js=sample5()&label=COPY"
quality="high"
bgcolor="#FFFFFF"
allowscriptaccess="sameDomain"
/>
</object>
サンプル6 重複
<textarea id="sample6">サンプル6</textarea>
<script type="text/javascript">
function sample6() {
alert(6);
return new Date() +"\r\n"+ (6*25);
}
</script>
<object id="external_setclipboard6" width="120" height="22" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="movie" value="setClipboard10.swf" />
<param name="FlashVars" value="value=VALUE&htmlid=sample6&js=sample6()&label=重複1&label=重複2" />
<param name="bgcolor" value="#FFFFFF" />
<param name="allowScriptAccess" value="sameDomain" />
<embed name="external_setclipboard6" width="120" height="22" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
src="setClipboard10.swf"
FlashVars="value=VALUE&htmlid=sample6&js=sample6()&label=重複1&label=重複2"
quality="high"
bgcolor="#FFFFFF"
allowscriptaccess="sameDomain"
/>
</object>
javascript:sample6 = null;eval()
サンプル7 SWFObject使用(JavaScript必須)
<div id="swf_container7" style="width:120px; height:22px">
<noscript style="color:red">JavaScriptを有効にしてください。</noscript>
</div>
<script type="text/javascript" src="/js/swfobject.js"></script>
<script type="text/javascript">
var so = new SWFObject("setClipboard10.swf", "external_setclipboard7", 120, 22, 8, "#FFFFFF");
so.addParam("bgcolor", "#FFFFFF");
so.addParam("allowScriptAccess", "sameDomain");
so.addVariable("label", "゚д゚");
so.addVariable("value", 'おわり');
so.write("swf_container7");
</script>
JavaScriptが無効になっている可能性を考えると、SWFObject+noscriptタグを使うか、常にvalueを指定しておいた方が良いかと思われます。