<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>EMXAS IT工房</title>
    <link>http://www.emxas.co.jp/itblog/</link>
    <description>ITLab Tech Blog</description>
    <language>ja</language>
    <generator>Nucleus CMS v3.3</generator>
    <copyright>&#169;emxas&amp;co,L.T.D.</copyright>
    <category>Weblog</category>
    <docs>http://backend.userland.com/rss</docs>
    <image>
      <url>http://www.emxas.co.jp/nucleus/nucleus2.gif</url>
      <title>EMXAS IT工房</title>
      <link>http://www.emxas.co.jp/itblog/</link>
    </image>
    <item>
 <title>Active Directory に JNDI アクセスしてオブジェクトを操作</title>
 <link>http://www.emxas.co.jp/itblog/?itemid=309</link>
<description><![CDATA[Active Directory に対し、JNDI(Java Naming and Directory Interface)を使用してアクセスし、オブジェクトを操作する方法を紹介します。<br />
<br />
実行環境<br />
<div class="inBlogTable"><table border="1"><tr><th width="150px;">Java SE</th><td width="150px;">1.5.0_10</td></tr><tr><th>Active Directory</th><td>2003 / 2008</td></tr></table></div><br />
公開紹介するサンプルコードの内容は以下となります。<br />
<ul><li><a href="#ou_creator">組織階層を作成する</a><li><a href="#user_creator">ユーザーを作成する</a><li><a href="#group_creator">グループを作成する</a><li><a href="#group_member_adder">グループにメンバを追加する</a><li><a href="#group_member_deletor">グループからメンバを削除する</a><li><a href="#user_ou_mover">ユーザーの組織階層を移動する</a></ul><br />
<br />
以下のサンプルコードは、<a href="http://www.emxas.co.jp/itblog/item_99.html" target="_self">過去掲載記事</a>を参照して下さい。<br />
<ul><li>ユーザーを検索する<li>ユーザーに属性を追加する<li>ユーザーの属性を変更する<li>ユーザーの属性を削除する</ul><br />
<br />
<a name="ou_creator"><b>◆組織階層を作成する</b></a><br />
<br />
"objectClass"属性に、"top","organizationalUnit"と設定するのがポイントです。<br />
<br />
<div class="itl_source" style="height:500px;"><br />
package jp.co.emxas.itl.jndi;<br />
<br />
import java.util.Hashtable;<br />
<br />
import javax.naming.Context;<br />
import javax.naming.NamingException;<br />
import javax.naming.directory.Attribute;<br />
import javax.naming.directory.Attributes;<br />
import javax.naming.directory.BasicAttribute;<br />
import javax.naming.directory.BasicAttributes;<br />
import javax.naming.directory.InitialDirContext;<br />
<br />
/**<br />
 * 組織階層を作成します。<br />
 */<br />
public class OUCreator {<br />
<br />
	/**<br />
	 * 組織階層を作成します。<br />
	 * <br />
	 * @param args<br />
	 * @throws NamingException<br />
	 *             LDAPアクセスに失敗した場合<br />
	 */<br />
	public static void main(String args[]) throws NamingException {<br />
		// ★★ LDAP接続環境を設定します Start<br />
		// ここで指定する情報は外部ファイル化するのが良いでしょう<br />
		Hashtable env = new Hashtable();<br />
		// Contextファクトリを設定<br />
		env.put(Context.INITIAL_CONTEXT_FACTORY,<br />
				"com.sun.jndi.ldap.LdapCtxFactory");<br />
		// 接続先URL(ホスト，ポート番号)を設定<br />
		env.put(Context.PROVIDER_URL, "ldap://localhost:389");<br />
		// 接続ユーザIDを設定します<br />
		// ※このユーザはオブジェクト作成権限を持つ必要があります<br />
		env.put(Context.SECURITY_PRINCIPAL,<br />
				"CN=jndi_connector,OU=Users,DC=emxas,DC=co,DC=jp");<br />
		// 接続ユーザのパスワードを設定します。<br />
		env.put(Context.SECURITY_CREDENTIALS, "password");<br />
		// ★★ LDAP接続環境を設定します End<br />
<br />
		// 設定した環境を元にコンテキストを生成します<br />
		InitialDirContext context = new InitialDirContext(env);<br />
<br />
		// 属性集合<br />
		Attributes attrs = new BasicAttributes();<br />
		// ou属性<br />
		Attribute attrOu = new BasicAttribute("ou");<br />
		attrOu.add(0, "ou1");<br />
		attrs.put(attrOu);<br />
		// objectClass(必須)<br />
		Attribute attrObjClass = new BasicAttribute("objectClass");<br />
		attrObjClass.add(0, "top");<br />
		attrObjClass.add(1, "organizationalUnit");<br />
		attrs.put(attrObjClass);<br />
<br />
		// 組織階層を作成<br />
		context.createSubcontext(<br />
				"OU=ou1,OU=Users,DC=emxas,DC=co,DC=jp", attrs);<br />
<br />
	}<br />
<br />
}<br />
</div><br />
<br />
<a name="user_creator"><b>◆ユーザーを作成する</b></a><br />
<br />
"objectClass"属性に、"top","person","inetOrgPerson"と設定するのがポイントです。<br />
<br />
<div class="itl_source" style="height:500px;"><br />
package jp.co.emxas.itl.jndi;<br />
<br />
import java.util.Hashtable;<br />
<br />
import javax.naming.Context;<br />
import javax.naming.NamingException;<br />
import javax.naming.directory.Attribute;<br />
import javax.naming.directory.Attributes;<br />
import javax.naming.directory.BasicAttribute;<br />
import javax.naming.directory.BasicAttributes;<br />
import javax.naming.directory.InitialDirContext;<br />
<br />
/**<br />
 * ユーザーを作成します。<br />
 */<br />
public class UserCreator {<br />
<br />
	/**<br />
	 * ユーザーを作成します。<br />
	 * <br />
	 * @param args<br />
	 * @throws NamingException<br />
	 *             LDAPアクセスに失敗した場合<br />
	 */<br />
	public static void main(String args[]) throws NamingException {<br />
		// ★★ LDAP接続環境を設定します Start<br />
		// ここで指定する情報は外部ファイル化するのが良いでしょう<br />
		Hashtable env = new Hashtable();<br />
		// Contextファクトリを設定<br />
		env.put(Context.INITIAL_CONTEXT_FACTORY,<br />
				"com.sun.jndi.ldap.LdapCtxFactory");<br />
		// 接続先URL(ホスト，ポート番号)を設定<br />
		env.put(Context.PROVIDER_URL, "ldap://localhost:389");<br />
		// 接続ユーザIDを設定します<br />
		// ※このユーザはオブジェクト作成権限を持つ必要があります<br />
		env.put(Context.SECURITY_PRINCIPAL,<br />
				"CN=jndi_connector,OU=Users,DC=emxas,DC=co,DC=jp");<br />
		// 接続ユーザのパスワードを設定します。<br />
		env.put(Context.SECURITY_CREDENTIALS, "password");<br />
		// ★★ LDAP接続環境を設定します End<br />
<br />
		// 設定した環境を元にコンテキストを生成します<br />
		InitialDirContext context = new InitialDirContext(env);<br />
<br />
		// 属性集合<br />
		Attributes attrs = new BasicAttributes();<br />
		// cn属性<br />
		Attribute attrCn = new BasicAttribute("cn");<br />
		attrCn.add(0, "user1");<br />
		attrs.put(attrCn);<br />
		// sn属性(姓)<br />
		Attribute attrSn = new BasicAttribute("sn");<br />
		attrSn.add(0, "user1");<br />
		attrs.put(attrSn);<br />
		// objectClass(必須)<br />
		Attribute attrObjClass = new BasicAttribute("objectClass");<br />
		attrObjClass.add(0, "top");<br />
		attrObjClass.add(1, "person");<br />
		attrObjClass.add(2, "inetOrgPerson");<br />
		attrs.put(attrObjClass);<br />
<br />
		// ユーザーを作成<br />
		context.createSubcontext(<br />
				"CN=user1,OU=Users,DC=emxas,DC=co,DC=jp", attrs);<br />
<br />
	}<br />
<br />
}<br />
</div><br />
<br />
<a name="group_creator"><b>◆グループを作成する</b></a><br />
<br />
"objectClass"属性に、"top","group"と設定するのがポイントです。<br />
<br />
<div class="itl_source" style="height:500px;"><br />
package jp.co.emxas.itl.jndi;<br />
<br />
import java.util.Hashtable;<br />
<br />
import javax.naming.Context;<br />
import javax.naming.NamingException;<br />
import javax.naming.directory.Attribute;<br />
import javax.naming.directory.Attributes;<br />
import javax.naming.directory.BasicAttribute;<br />
import javax.naming.directory.BasicAttributes;<br />
import javax.naming.directory.InitialDirContext;<br />
<br />
/**<br />
 * グループを作成します。<br />
 */<br />
public class GroupCreator {<br />
<br />
	/**<br />
	 * グループを作成します。<br />
	 * <br />
	 * @param args<br />
	 * @throws NamingException<br />
	 *             LDAPアクセスに失敗した場合<br />
	 */<br />
	public static void main(String args[]) throws NamingException {<br />
		// ★★ LDAP接続環境を設定します Start<br />
		// ここで指定する情報は外部ファイル化するのが良いでしょう<br />
		Hashtable env = new Hashtable();<br />
		// Contextファクトリを設定<br />
		env.put(Context.INITIAL_CONTEXT_FACTORY,<br />
				"com.sun.jndi.ldap.LdapCtxFactory");<br />
		// 接続先URL(ホスト，ポート番号)を設定<br />
		env.put(Context.PROVIDER_URL, "ldap://localhost:389");<br />
		// 接続ユーザIDを設定します<br />
		// ※このユーザはオブジェクト作成権限を持つ必要があります<br />
		env.put(Context.SECURITY_PRINCIPAL,<br />
				"CN=jndi_connector,OU=Users,DC=emxas,DC=co,DC=jp");<br />
		// 接続ユーザのパスワードを設定します。<br />
		env.put(Context.SECURITY_CREDENTIALS, "password");<br />
		// ★★ LDAP接続環境を設定します End<br />
<br />
		// 設定した環境を元にコンテキストを生成します<br />
		InitialDirContext context = new InitialDirContext(env);<br />
<br />
		// 属性集合<br />
		Attributes attrs = new BasicAttributes();<br />
		// cn属性<br />
		Attribute attrCn = new BasicAttribute("cn");<br />
		attrCn.add(0, "group1");<br />
		attrs.put(attrCn);<br />
		// objectClass(必須)<br />
		Attribute attrObjClass = new BasicAttribute("objectClass");<br />
		attrObjClass.add(0, "top");<br />
		attrObjClass.add(1, "group");<br />
		attrs.put(attrObjClass);<br />
<br />
		// グループを作成<br />
		context.createSubcontext(<br />
				"CN=group1,OU=Users,DC=emxas,DC=co,DC=jp", attrs);<br />
<br />
	}<br />
<br />
}<br />
</div><br />
<br />
<a name="group_member_adder"><b>◆グループにメンバを追加する</b></a><br />
<br />
<div class="itl_source" style="height:500px;"><br />
package jp.co.emxas.itl.jndi;<br />
<br />
import java.util.Hashtable;<br />
<br />
import javax.naming.Context;<br />
import javax.naming.NamingException;<br />
import javax.naming.directory.Attribute;<br />
import javax.naming.directory.BasicAttribute;<br />
import javax.naming.directory.DirContext;<br />
import javax.naming.directory.InitialDirContext;<br />
import javax.naming.directory.ModificationItem;<br />
<br />
/**<br />
 * グループにメンバを追加します。<br />
 */<br />
public class GroupMemberAdder {<br />
<br />
	/**<br />
	 * グループにメンバを追加します。<br />
	 * <br />
	 * @param args<br />
	 * @throws NamingException<br />
	 *             LDAPアクセスに失敗した場合<br />
	 */<br />
	public static void main(String args[]) throws NamingException {<br />
		// ★★ LDAP接続環境を設定します Start<br />
		// ここで指定する情報は外部ファイル化するのが良いでしょう<br />
		Hashtable env = new Hashtable();<br />
		// Contextファクトリを設定<br />
		env.put(Context.INITIAL_CONTEXT_FACTORY,<br />
				"com.sun.jndi.ldap.LdapCtxFactory");<br />
		// 接続先URL(ホスト，ポート番号)を設定<br />
		env.put(Context.PROVIDER_URL, "ldap://localhost:389");<br />
		// 接続ユーザIDを設定します<br />
		// ※このユーザはオブジェクト作成権限を持つ必要があります<br />
		env.put(Context.SECURITY_PRINCIPAL,<br />
				"CN=jndi_connector,OU=Users,DC=emxas,DC=co,DC=jp");<br />
		// 接続ユーザのパスワードを設定します。<br />
		env.put(Context.SECURITY_CREDENTIALS, "password");<br />
		// ★★ LDAP接続環境を設定します End<br />
<br />
		// 設定した環境を元にコンテキストを生成します<br />
		InitialDirContext context = new InitialDirContext(env);<br />
<br />
		// member属性の追加<br />
		ModificationItem[] modificationItems = new ModificationItem[1];<br />
		Attribute attrMember = new BasicAttribute( "member" , "CN=user1,OU=Users,DC=emxas,DC=co,DC=jp" );<br />
		modificationItems[0] = new ModificationItem( DirContext.ADD_ATTRIBUTE , attrMember );<br />
<br />
		// グループにメンバを追加<br />
		context.modifyAttributes( "CN=group1,OU=Users,DC=emxas,DC=co,DC=jp" , modificationItems );<br />
<br />
	}<br />
<br />
}<br />
</div><br />
<br />
<a name="group_member_deletor"><b>◆グループからメンバを削除する</b></a><br />
<br />
<div class="itl_source" style="height:500px;"><br />
package jp.co.emxas.itl.jndi;<br />
<br />
import java.util.Hashtable;<br />
<br />
import javax.naming.Context;<br />
import javax.naming.NamingException;<br />
import javax.naming.directory.Attribute;<br />
import javax.naming.directory.BasicAttribute;<br />
import javax.naming.directory.DirContext;<br />
import javax.naming.directory.InitialDirContext;<br />
import javax.naming.directory.ModificationItem;<br />
<br />
/**<br />
 * グループからメンバを削除します。<br />
 */<br />
public class GroupMemberDeletor {<br />
<br />
	/**<br />
	 * グループからメンバを削除します。<br />
	 * <br />
	 * @param args<br />
	 * @throws NamingException<br />
	 *             LDAPアクセスに失敗した場合<br />
	 */<br />
	public static void main(String args[]) throws NamingException {<br />
		// ★★ LDAP接続環境を設定します Start<br />
		// ここで指定する情報は外部ファイル化するのが良いでしょう<br />
		Hashtable env = new Hashtable();<br />
		// Contextファクトリを設定<br />
		env.put(Context.INITIAL_CONTEXT_FACTORY,<br />
				"com.sun.jndi.ldap.LdapCtxFactory");<br />
		// 接続先URL(ホスト，ポート番号)を設定<br />
		env.put(Context.PROVIDER_URL, "ldap://localhost:389");<br />
		// 接続ユーザIDを設定します<br />
		// ※このユーザはオブジェクト作成権限を持つ必要があります<br />
		env.put(Context.SECURITY_PRINCIPAL,<br />
				"CN=jndi_connector,OU=Users,DC=emxas,DC=co,DC=jp");<br />
		// 接続ユーザのパスワードを設定します。<br />
		env.put(Context.SECURITY_CREDENTIALS, "password");<br />
		// ★★ LDAP接続環境を設定します End<br />
<br />
		// 設定した環境を元にコンテキストを生成します<br />
		InitialDirContext context = new InitialDirContext(env);<br />
<br />
		// member属性の削除<br />
		ModificationItem[] modificationItems = new ModificationItem[1];<br />
		Attribute attrMember = new BasicAttribute( "member" , "CN=user1,OU=Users,DC=emxas,DC=co,DC=jp" );<br />
		modificationItems[0] = new ModificationItem( DirContext.REMOVE_ATTRIBUTE , attrMember );<br />
<br />
		// グループからメンバを削除<br />
		context.modifyAttributes( "CN=group1,OU=Users,DC=emxas,DC=co,DC=jp" , modificationItems );<br />
<br />
	}<br />
<br />
}<br />
</div><br />
<br />
<a name="user_ou_mover"><b>◆ユーザーの組織階層を移動する</b></a><br />
<br />
<div class="itl_source" style="height:500px;"><br />
package jp.co.emxas.itl.jndi;<br />
<br />
import java.util.Hashtable;<br />
<br />
import javax.naming.Context;<br />
import javax.naming.NamingException;<br />
import javax.naming.directory.InitialDirContext;<br />
<br />
/**<br />
 * ユーザーの組織階層を移動します。<br />
 */<br />
public class UserOUMover {<br />
<br />
	/**<br />
	 * ユーザーの組織階層を移動します。<br />
	 * <br />
	 * @param args<br />
	 * @throws NamingException<br />
	 *             LDAPアクセスに失敗した場合<br />
	 */<br />
	public static void main(String args[]) throws NamingException {<br />
		// ★★ LDAP接続環境を設定します Start<br />
		// ここで指定する情報は外部ファイル化するのが良いでしょう<br />
		Hashtable env = new Hashtable();<br />
		// Contextファクトリを設定<br />
		env.put(Context.INITIAL_CONTEXT_FACTORY,<br />
				"com.sun.jndi.ldap.LdapCtxFactory");<br />
		// 接続先URL(ホスト，ポート番号)を設定<br />
		env.put(Context.PROVIDER_URL, "ldap://localhost:389");<br />
		// 接続ユーザIDを設定します<br />
		// ※このユーザはオブジェクト作成権限を持つ必要があります<br />
		env.put(Context.SECURITY_PRINCIPAL,<br />
				"CN=jndi_connector,OU=Users,DC=emxas,DC=co,DC=jp");<br />
		// 接続ユーザのパスワードを設定します。<br />
		env.put(Context.SECURITY_CREDENTIALS, "password");<br />
		// ★★ LDAP接続環境を設定します End<br />
<br />
		// 設定した環境を元にコンテキストを生成します<br />
		InitialDirContext context = new InitialDirContext(env);<br />
<br />
		// ユーザーの組織階層を移動<br />
		context.rename("CN=user1,OU=Users,DC=emxas,DC=co,DC=jp", "CN=user1,OU=ou1,OU=Users,DC=emxas,DC=co,DC=jp");<br />
<br />
	}<br />
<br />
}<br />
</div><br />
<br />
　サンプルコードの実行には、予め、Active Directory に接続ユーザアカウント(jndi_connector)を作成し、オブジェクト操作権限をもつ、Administratorsグループ権限を付与しました。<br />
オブジェクト操作権限をもたない場合、オブジェクト操作時にエラーとなるので注意して下さい。<br />
※検索処理を実施するだけであれば、オブジェクト操作権限をもつ必要はありません。<br />
<br />
　今回は、Active Directory オブジェクトに対して JNDI でアクセスし、オブジェクトを操作しましたが、LDAP アクセスの観点から見れば、一般的な Directory サーバに対して操作を行っているのと大きく変わりはありません。<br />
Active Directory オブジェクト固有の考慮が必要なのは、各オブジェクトの属性名と属性値です。<br />
例えば、ユーザアカウントの“国/地域”の属性名は「c」で属性値は「文字列」です。<br />
これらオブジェクトの属性名と属性値が分かれば、LDAP アクセスにより、自由にオブジェクトの操作が可能となります。<br />
※オブジェクトの属性名と属性値は、Windows Server の「ADSI エディター」などで確認可能です。]]></description>
 <category>Java関連技術</category>
<comments>http://www.emxas.co.jp/itblog/?itemid=309</comments>
 <pubDate>Mon, 11 Jul 2011 14:04:00 +0900</pubDate>
</item><item>
 <title>[Abobe AIR] [Flex] [TextArea]コンポーネントの制御</title>
 <link>http://www.emxas.co.jp/itblog/?itemid=290</link>
<description><![CDATA[TextAreaコンポーネントで入力を行う際に、<br />
[CTRL+S]などのキー操作を行うと変な文字が入力されてしまいます。<br />
例えば、アプリケーションの機能として<br />
[[CTRL+S]でテキストエリアに入力されている文字列をローカルのファイルに保存する]<br />
というようなショートカット機能がある場合に、<br />
ファイルの末尾に余分な文字がくっつくことになってしまいます。<br />
<br />
それを回避するための方法です。<br />
<br />
<div class="itl_source" style="width:550px;height:500px;"><br />
package scripts.extend<br />
{<br />
  import flash.system.Capabilities;<br />
  import flash.events.KeyboardEvent;<br />
  import flash.ui.Keyboard;<br />
  import mx.controls.TextArea;<br />
<br />
  /**<br />
   * テキストエリア拡張クラス<br />
   * @author<br />
   * <br />
   */	<br />
  public class TextAreaEx extends TextArea<br />
  {<br />
    /**<br />
     * コンストラクタ <br />
     * <br />
     */		<br />
    public function TextAreaEx()<br />
    {<br />
      super();<br />
    }<br />
<br />
    /**<br />
     * キーボードが押されたとき <br />
     * Ctrl(Command)+Sを防御<br />
     * @param event<br />
     * <br />
     */		<br />
    override protected function keyDownHandler(event:KeyboardEvent):void<br />
    {<br />
      var isWin:Boolean = isWindows();<br />
<br />
      if((isWin && event.ctrlKey) || (!isWin && event.commandKey))<br />
      {<br />
        if(Keyboard.S == event.keyCode)<br />
        {	<br />
          event.preventDefault();<br />
<br />
          return;<br />
        }<br />
      }<br />
<br />
      super.keyDownHandler(event);<br />
    }<br />
<br />
    /**<br />
     * OSがWindowsかどうか <br />
     * @return <br />
     * <br />
     */		<br />
    private function isWindows():Boolean<br />
    {<br />
      return (Capabilities.os.substring(0, 3) == "Win");<br />
    }<br />
  }<br />
}<br />
</div><br />
<br />
キーボードが押された時(KeyboardEvent.KEY_DOWN)のハンドラをオーバーライドします。<br />
Windowsでは[CTRL+S]ですが、Macでは[Command+S]が一般的ですので、OSの判定も行っています。<br />
OS判定のメソッドは本来はユーティリティクラスなどに定義したほうがいいでしょう。<br />
<br />
OSがWindowsで[CTRL+S]もしくはOSがMacで[Command+S]の場合は、イベントをキャンセルし、<br />
それ以外は親クラスで本来の処理をしてもらう、というコードです。<br />
<br />
他にも、[CTRL+J]で改行してしまったり、[CTRL+Y]で罫線が入力されてしまったりするので、<br />
防ぎたい場合には、その分だけif(KeyBoard.S == event.keyCode || KeyBoard.J == event.keyCode)のように<br />
条件を増やしていくといいと思います。<br />
<br />
多くなった場合には防ぎたいキーを配列にして、<br />
if(-1!=arr.indexOf(event.keyCode))や、<br />
if(arr.contains(event.keyCode))でもすっきりしていいですね。<br />
<br />
TextInputでも同様に拡張クラスを作成すれば、同じことが実現できます。]]></description>
 <category>AIR</category>
<comments>http://www.emxas.co.jp/itblog/?itemid=290</comments>
 <pubDate>Mon, 4 Jan 2010 00:00:00 +0900</pubDate>
</item><item>
 <title>Virtual PC 2007 で Windows XP + IE6 の日本語化利用</title>
 <link>http://www.emxas.co.jp/itblog/?itemid=289</link>
<description><![CDATA[現在、Windows Internet Explorer(以下IE) の最新バージョンは8となりましたが、未だに、IE6のみターゲットにしているWebシステムも多くあります。<br />
今回は、「IE6利用のWebシステムの稼働確認をしたいけど、もうIE6はインストールしてないよ！！」っと言った場合のIE6の利用方法をご紹介します。IE6を利用する方法はいくつかありますが、今回は、Microsoftから無償配布されている以下を利用した方法をご紹介します。<br />
　・ Virtual PC 2007 の仮想化ソフト<br />
　・ WindowsXP + IE6 の Virtual PC 用ゲスト OS イメージ<br />
<br />
ただし、今回利用するゲストOSイメージは英語版となるため、日本語の表示・入力を可能とするために設定変更などの対応が必要となります。<br />
<br />
今回はその手順もあわせてご紹介します。<br />
<br />
<div class="inBlogTitle1">事前準備</div><br />
<b>Virtual PC 2007 ダウンロード＆インストール</b><br />
<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=04D26402-3199-48A3-AFA2-2DC0B40A73B6#filelist" target="_blank">このサイト</a>からダウンロードし、インストールを実施して下さい。</ul><br />
<br />
<br />
<div class="inBlogTitle1">WindowsXP + IE6 イメージ ダウンロード＆インストール</div><br />
<br />
<b>WindowsXP + IE6 ダウンロード</b><br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en" target="_blank">このサイト</a>から「IE6-XPSP3.exe」をダウンロードします。<br />
ダウンロードした「IE6-XPSP3.exe」を実行し、WindowsXPのVirtualPCゲストOSイメージを任意のフォルダに展開します。<br />
<img src="http://www.emxas.co.jp/media/10/20091219-001.jpg"/><br />
<img src="http://www.emxas.co.jp/media/10/20091219-002.jpg"/><br />
<br />
<b>ゲストOSをVirtualPCのバーチャルマシーンに登録</b><br />
VirtualPCを起動し、新しいバーチャルマシーンウィザードからバーチャルマシーンを追加します。<br />
「ファイル -> 新しいバーチャルマシーンウィザード」メニューを選択<br />
<img src="http://www.emxas.co.jp/media/10/20091219-003.jpg"/><br />
「次へ」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-004.jpg"/><br />
「バーチャルマシーンの作成」を選択し、「次へ」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-005.jpg"/><br />
任意のフォルダに展開したバーチャルマシーンファイルを選択し、「次へ」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-006.jpg"/><br />
「Windows XP」を選択し、「次へ」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-007.jpg"/><br />
「推奨 RAM を使用」を選択し、「次へ」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-008.jpg"/><br />
「既存のバーチャルハードディスク」を選択し、「次へ」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-009.jpg"/><br />
「バーチャルハードディスク」「復元ディスクを有効にする」を選択し、「次へ」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-010.jpg"/><br />
「完了」ボタンを押下<br />
<br />
これで Virtual PC に登録したゲストOSを起動することが出来ます。<br />
<br />
<br />
<div class="inBlogTitle1">ゲストOS日本語化</div><br />
<b>日本語表示用システムファイルの導入</b><br />
IE6を起動し、日本語サイトを表示します。<br />
<img width="586" src="http://www.emxas.co.jp/media/10/20091219-012.jpg"/><br />
「その言語はインストールされていない」といったエラーが表示されるので「Install」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-013.jpg"/><br />
システムファイル導入のため、CDを要求してきますが、Windows XP 日本語版ホストPCの「C:\I386」以下のフォルダを共有してインストールしていきます。<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-014.jpg"/><br />
今回は、“Windows XP 日本語版ホストPCの「C:\I386」フォルダ”を“Z:”ドライブとして割り当て、インストールを実施しました。<br />
ほかにも以下ファイルを要求されますが、「C:\I386」または「C:\I386\LANG」フォルダ配下に存在しているので、該当するファイル指定すれば問題ありません。<br />
・imekrcic.dll<br />
・kbd106.dll<br />
・gulim.ttc<br />
・kbdipn.dll<br />
<br />
インストールが完了すると、再起動を求められます。<br />
<img src="http://www.emxas.co.jp/media/10/20091219-020.jpg"/><br />
再起動すると日本語の表示が可能となります。<br />
<br />
<b>日本語表示設定</b><br />
Control Panel - Date and Time を起動します。<br />
Time Zone を「Osaka,Sapporo,Tokyo」に変更します。<br />
<img src="http://www.emxas.co.jp/media/10/20091219-021.jpg"/><br />
<br />
Control Panel - Regional and Language Options を起動します。<br />
「English」「USA」といった項目を「Japanese」に変更し、Languageタブの「Details」を開き日本語入力システムを選択します。<br />
<img src="http://www.emxas.co.jp/media/10/20091219-022.jpg"/><br />
<img src="http://www.emxas.co.jp/media/10/20091219-023.jpg"/><br />
<img src="http://www.emxas.co.jp/media/10/20091219-024.jpg"/><br />
<br />
<b>キーボード設定</b><br />
英語キーボードが設定されているので、日本語キーボードを設定します。<br />
コンピュータ管理を起動します。<br />
<img src="http://www.emxas.co.jp/media/10/20091219-025.jpg"/><br />
[デバイスマネージャ]-[キーボード]を右クリックで、UpdateDriverを選択<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-026.jpg"/><br />
「No, not this time」を選択し、「Next」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-027.jpg"/><br />
「Install from a list or specific location [Advanced]」を選択し、「Next」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-028.jpg"/><br />
「Don't search. I will choose the driver to install」を選択し、「Next」ボタンを押下<br />
<br />
<img src="http://www.emxas.co.jp/media/10/20091219-029.jpg"/><br />
「Standard keyboards」「Japanese PS/2 Keyboard(106/109 Key)」を選択し、「Next」ボタンを押下<br />
<br />
<br />
以上の手順で完了となります。]]></description>
 <category>小ネタ集</category>
<comments>http://www.emxas.co.jp/itblog/?itemid=289</comments>
 <pubDate>Tue, 22 Dec 2009 13:02:11 +0900</pubDate>
</item><item>
 <title>POI(書き込み機能(1))</title>
 <link>http://www.emxas.co.jp/itblog/?itemid=283</link>
<description><![CDATA[以前に、JavaでMicrosoft Excelを扱うライブラリとしてJava Excel API(JXL)をご紹介しました。<br />
今回はより有名なPOIについて同様の内容について記述していきたいと思います。<br />
<br />
JXLとの比較もかねて、メニューの構成を前回とほぼ同一としています。<br />
まずはExcel文書の書き込み機能時に利用するAPIについて、2回に分けてご紹介していきます。<br />
<a href="#1">開始／終了処理</a><br />
　<a href="#1-1">新規にExcelファイルを作成する。</a><br />
　<a href="#1-2">既存のExcelファイルから操作用ファイルを作成する。</a><br />
　<a href="#1-3">保存してExcelファイルの操作を終了する。</a><br />
<a href="#2">ワークブックの操作</a><br />
　<a href="#2-1">ワークブック内のシート数を確認する。</a><br />
　<a href="#2-2">内容を書き込むためにシートのインスタンスを取得する。</a><br />
　<a href="#2-3">既存のシートの内容を別シートにコピーする。</a><br />
　<a href="#2-4">ワークブック内に新規シートを作成する。</a><br />
　<a href="#2-5">シートの順序を変更する。</a><br />
　<a href="#2-6">シートを削除する。</a><br />
　<a href="#2-7">登録された名前定義を取得する。</a><br />
　<a href="#2-8">名前定義されたセル範囲を取得する。</a><br />
<a href="#3">シートの操作</a><br />
　<a href="#3-1">シート名を設定する。</a><br />
　<a href="#3-2">シートに行を追加する。</a><br />
　<a href="#3-3">シートに列を追加する。</a><br />
　<a href="#3-4">行を削除する。</a><br />
　<a href="#3-5">列を削除する。</a><br />
　<a href="#3-6">内容を書き込むためにセルのインスタンスを取得する。</a><br />
　<a href="#3-7">値、フォーマットを設定したセルをシートに追加する。</a><br />
　<a href="#3-8">シート内のページ切り替え位置を設定する。</a><br />
　<a href="#3-9">行の高さを設定する。</a><br />
　<a href="#3-10">列の幅を設定する。</a><br />
　<a href="#3-11">列のフォーマットを設定する。</a><br />
　<a href="#3-12">セルを結合する。</a><br />
　<a href="#3-13">セルの結合を解除する。</a><br />
　<a href="#3-14">イメージを設定する。</a><br />
　<a href="#3-15">ハイパーリンクを設定する。</a><br />
<br />
<br />
<br />
<div id="1" class="inBlogTitle1">開始／終了処理</div><br />
org.apache.poi.hssf.usermodel.HSSFWorkbookのメソッドを使用します。<br />
<br />
<b id="1-1">新規にExcelファイルを作成する。</b><br />
<div class="itl_source">HSSFWorkbook workbook = new HSSFWorkbook();</div><br />
<br />
<b id="1-2">既存のExcelファイルから操作用ファイルを作成する。</b><br />
org.apache.poi.poifs.filesystem.POIFSFileSystemを使用します。<br />
<div class="itl_source">// POIFSFileSystemとして既存のExcelファイルを読み込む<br />
POIFSFileSystem fileSystem = new POIFSFileSystem(<br />
        new FileInputStream(filePath));<br />
HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);</div><br />
<br />
<b id="1-3">保存してExcelファイルの操作を終了する。</b><br />
<div class="itl_source">// OutputStreamに対して内容を書き込む<br />
Output output = new FileOutputStream("path/to/excel/file");<br />
<br />
/* <br />
 * 書き込み処理<br />
 */<br />
<br />
// 内容を保存<br />
workbook.write(output);<br />
// 終了処理<br />
try {<br />
    output.close();<br />
} IOException e) {<br />
    e.printStackTrace();<br />
}</div><br />
<br />
<br />
<div id="2" class="inBlogTitle1">ワークブックの操作</div><br />
org.apache.poi.hssf.usermodel.HSSFWorkbookを使用します。<br />
以下変数workbookをHSSFWorkbookのインスタンスとします。<br />
<br />
<b id="2-1">ワークブック内のシート数を確認する。</b><br />
<div class="itl_source">int count = workbook.getNumberOfSheets();<br />
</div><br />
<br />
<b id="2-2">内容を書き込むためにシートのインスタンスを取得する。</b><br />
<div class="itl_source">// インデックスを指定して取得する<br />
int index = 0;<br />
HSSFSheet indexedSheet = workbook.getSheetAt(index);<br />
<br />
// シート名を指定して取得する<br />
String sheetName = "Sheet1";<br />
HSSFSheet namedSheet = workbook.getSheet(sheetName);</div><br />
<br />
※ シートの操作は<a href="#3">こちら</a>を参照してください。<br />
<br />
<b id="2-3">既存のシートの内容を別シートにコピーする。</b><br />
<br />
コピーを行なうAPIはないようです。<br />
<br />
<b id="2-4">ワークブック内に新規シートを作成する。</b><br />
<div class="itl_source">// 新規シートを作成する<br />
HSSFSheet sheet1 = workbook.createSheet();<br />
<br />
// 名称を指定してシートを作成する<br />
HSSFSheet sheet2 = workbook.createSheet("SHEETNAME");</div><br />
<br />
<b id="2-5">シートの順序を変更する。</b><br />
<div class="itl_source">// シート名[sheet1]を3シート目に移動する<br />
String moveSheetName = "sheet1";<br />
int moveTo = 2;<br />
workbook.setSheetOrder(moveSheetName, moveTo);<br />
</div><br />
<br />
<b id="2-6">シートを削除する。</b><br />
<div class="itl_source">// 1シート目を削除する。<br />
int deleteSheet = 0;<br />
workbook.removeSheetAt(deleteSheet);<br />
</div><br />
<br />
<b id="2-7">登録された名前定義を取得する。</b><br />
※ 「挿入->名前->定義」で登録された名前定義名称を取得します。<br />
<div class="itl_source">// 設定された名前定義数を取得<br />
int namesCount = workbook.getNumberOfNames();<br />
for (int i = 0; i < namesCount; i++) {<br />
	HSSFName name = workbook.getNameAt(i);<br />
	String nameName = name.getNameName();<br />
}<br />
</div><br />
<br />
<b id="2-8">名前定義されたセル範囲を取得する。</b><br />
<div class="itl_source">// 設定された名前定義数を取得<br />
int namesCount = workbook.getNumberOfNames();<br />
for (int i = 0; i < namesCount; i++) {<br />
	HSSFName name = workbook.getNameAt(i);<br />
	String formula = name.getRefersToFormula();<br />
}<br />
</div><br />
※ シート名!開始セル位置:終了セル位置 の形式で取得できます。<br />
<br />
<div id="3" class="inBlogTitle1">シートの操作</div><br />
org.apache.poi.hssf.usermodel.HSSFSheetを使用します。<br />
HSSFSheetインスタンスの取得は<a href="#2">こちら</a>を参照してください。<br />
以下変数sheetをHSSFSheetのインスタンスとします。<br />
<br />
<br />
<b id="3-1">1シート目のシート名を変更する。</b><br />
<div class="itl_source"><br />
int index = 0;<br />
String sheetName = "updateSheetName";<br />
workbook.setSheetName(indexm sheetName);<br />
</div><br />
<br />
<b id="3-2">シートに行を追加する。</b><br />
<div class="itl_source">10行追加する<br />
for (int i = 0; i < 10; i++) {<br />
    HSSFRow row = sheet.createRow(i);<br />
}<br />
</div><br />
<br />
<b id="3-3">シートに列を追加する。</b><br />
列単位で操作するAPIはないようです。<br />
<br />
<b id="3-4">行を削除する。</b><br />
<div class="itl_source">1行目を削除する<br />
HSSFRow row = sheet.getRow(0);<br />
sheet.removeRow(row);<br />
</div><br />
<br />
<b id="3-5">列を削除する。</b><br />
列単位で操作するAPIはないようです。<br />
<br />
<b id="3-6">内容を書き込むためにセルのインスタンスを取得する。</b><br />
<div class="itl_source">// 行から、列番号を指定してセルを取得<br />
int row = 0;<br />
int column = 0;<br />
HSSFRow row = sheet.getRow(row);<br />
HSSFCell cell = row.getCell(column);<br />
</div><br />
※ セルの操作は次回に記述します。<br />
<br />
<b id="3-7">値、フォーマットを設定したセルを追加する。</b><br />
<div class="itl_source">// 10行10列のセルを追加<br />
for (int i = 0; i < 10; i++) {<br />
	HSSFRow rowa = sheet1.createRow(i);<br />
	for (int j = 0; j < 10; j++) {<br />
		row.createCell(j);<br />
	}<br />
}<br />
</div><br />
<br />
<br />
<b id="3-8">シート内のページ切り替え位置を設定する。</b><br />
<div class="itl_source"><br />
int rowBreak = 10;<br />
int colBreak = 10;<br />
sheet.setRowBreak(rowBreak);<br />
shee.setColumnBreak(colBreak);<br />
</div><br />
<br />
<b id="3-9">行の高さを設定する。</b><br />
<div class="itl_source">// 設定対象行番号<br />
int rowIndex = 3;<br />
// 高さ<br />
short height = 20;<br />
HSSFRow heightedRow = sheet.getRow(rowIndex);<br />
heightedRow.setHeight(height);<br />
<br />
// 行を非表示にする<br />
rowIndex = 5;<br />
HSSFRow hiddenedRow = sheet.getRow(rowIndex);<br />
hiddenedRow.setZeroHeight(true);<br />
</div><br />
<br />
<br />
<b id="3-10">列の幅を設定する。</b><br />
<div class="itl_source">// 設定対象列番号<br />
int column = 3;<br />
// 幅<br />
int width = 20;<br />
sheet.setColumnWidth(column, width);<br />
</div><br />
<br />
<b id="3-11">列のフォーマットを設定する。</b><br />
<div class="itl_source">// 設定対象セルを取得<br />
int row = 5;<br />
int column = 3;<br />
HSSFRow row = sheet.getRow(row);<br />
HSSFCell cell = sheet.getCell(column);<br />
// セルからスタイル情報の取得<br />
HSSFCellStyle cellStyle = cell.getCellStyle();<br />
<br />
// 行のスタイル情報の取得<br />
HSSFCellStyle rowStyle = row.getRowStyle();<br />
<br />
// 列のスタイル情報の取得<br />
HSSFCellStyle colStyle = sheet.getColumnStyle(column);<br />
<br />
/*<br />
 * 値、フォーマットを設定<br />
 * 設定方法は次回に記述します<br />
 */<br />
</div><br />
<br />
<b id="3-12">セルを結合する。</b><br />
<div class="itl_source">// 結合開始セル位置<br />
int fromRow = 0;<br />
int fromColumn = 1;<br />
// 結合終了セル位置<br />
int toRow = 3;<br />
int toColumn = 3;<br />
CellRangeAddress range = new CellRangeAddress(fromRow, toRow, fromColumn, toColumn);<br />
sheet.addMergedRegion(range);<br />
</div><br />
<br />
<b id="3-13">セルの結合を解除する。</b><br />
<div class="itl_source">// インデックスを指定して結合を解除<br />
int mergeIndex = 0;<br />
sheet.removeMergedRegion(mergeIndex);<br />
</div><br />
<br />
<b id="3-14">イメージを設定する。</b><br />
<div class="itl_source">// イメージファイルをbyte配列に読み込む<br />
String imageFilePath = "image/file/path";<br />
InputStream input = new FileInputStream(imageFilePath);<br />
ByteArrayOutputStream out = new ByteArrayOutputStream();<br />
byte[] bytes = new byte[1];<br />
while (input.read(bytes) != -1) {<br />
	out.write(bytes);<br />
}<br />
// ワークブックにイメージを追加し、追加したイメージのインデックスを取得<br />
int index = workbook.addPicture(out.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG);<br />
<br />
// シートに表示設定<br />
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();<br />
HSSFClientAnchor anchor = new HSSFClientAnchor(<br />
		1, <br />
		1, <br />
		5,<br />
		5, <br />
		(short) 1, <br />
		2,<br />
		(short) 3,<br />
		5);<br />
anchor.setAnchorType(HSSFClientAnchor.MOVE_AND_RESIZE);<br />
patriarch.createPicture(anchor, index);<br />
</div><br />
<br />
<b id="3-15">ハイパーリンクを設定する。</b><br />
<div class="itl_source">int rowNumber = 5;<br />
int colNumber = 3;<br />
<br />
// セルを作成し、リンクを設定<br />
HSSFRow row = sheet1.createRow(rowNumber);<br />
HSSFCell cell = row.createCell(colNumber);<br />
HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);<br />
link.setAddress("http://www.emxas.co.jp");<br />
link.setFirstColumn(rowNumber);<br />
link.setFirstRow(colNumber);<br />
cell.setHyperlink(link);<br />
</div><br />
<br />
残りの書き込み機能については次回以降に記述します。<br />
]]></description>
 <category>オープンソース</category>
<comments>http://www.emxas.co.jp/itblog/?itemid=283</comments>
 <pubDate>Tue, 8 Dec 2009 00:00:00 +0900</pubDate>
</item><item>
 <title>IE8におけるJavaScriptの挙動変更</title>
 <link>http://www.emxas.co.jp/itblog/?itemid=275</link>
<description><![CDATA[InternetExploreｒ8（以下IE8）において、JavaScriptの挙動が以前のバージョンと変わっているものがあり、<br />
これによりIE8では、正常に動作しないページあります。<br />
<br />
ここでは幾つか挙動の変化したものについて紹介いたします。<br />
<br />
<br />
IE８では互換性をとるために、幾つかの動作モードが存在しています。<br />
ここではIE8における、IE8モードでの挙動について説明いたします。<br />
<br />
■getElementByIdメソッド<br />
<br />
　●NAME属性とID属性<br />
<br />
　既存のIEではgetElementByIdメソッドの対象となる属性は'NAME'または'ID'でしたが、<br />
　IE8からは'ID'のみ対象となりました。<br />
<br />
　　【サンプルコード】<div class="itl_source">&lt;head&gt;<br />
  &lt;title&gt;Example1&lt;/title&gt;<br />
  &lt;script&gt;<br />
    function GetAttr(){<br />
      var obj1 = document.getElementById("target_id");<br />
      var sHref1Attr = obj1.getAttribute("href");<br />
      var sOutput = ("target id : " + sHref1Attr);<br />
<br />
      var obj2 = document.getElementById("target_name");<br />
      if( obj2 != null ) {<br />
          var sHref2Attr = obj2.getAttribute("Href");<br />
          var sOutput = ( sOutput + "&lt;br/&gt;" + "target name : " + sHref2Attr );<br />
      } else {<br />
          var sOutput = ( sOutput + "&lt;br/&gt;" + "target name : null" );<br />
      }<br />
<br />
      document.getElementById("output").innerHTML = sOutput;<br />
    }<br />
  &lt;/script&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body onload="GetAttr()"&gt;<br />
   &lt;a class="emxas" id="target_id" name="target_name" href="http://www.emxas.co.jp/index.html"&gt;エムザス株式会社&lt;/a&gt;<br />
   &lt;div id="output"&gt;Output appears here.&lt;/div&gt;<br />
&lt;/body&gt;<br />
</div>　　【結果】<br />
　　　　『IE7』<br />
　　　　　　target id : http://www.emxas.co.jp/index.html<br />
　　　　　　target name : http://www.emxas.co.jp/index.html　　　← NAME属性も取得可能<br />
　　　　『IE8』<br />
　　　　　　target id : http://www.emxas.co.jp/index.html<br />
　　　　　　target name : null　　　　　　　　　　　　　　　　　　　　　　　← NAME属性は取得不可<br />
<br />
　●属性名の大文字小文字の区別<br />
<br />
　既存のIEではgetElementByIdメソッドで指定する属性名の大文字小文字を区別していませんでしたが、<br />
　IE8からは大文字小文字を区別するように変更されました。<br />
<br />
　　【サンプルコード】<div class="itl_source">&lt;head&gt;<br />
  &lt;title&gt;Example1&lt;/title&gt;<br />
  &lt;script&gt;<br />
    function GetAttr(){<br />
      var obj = document.getElementById("Target_ID");<br />
      if( obj != null ) {<br />
          var sHrefAttr = obj.getAttribute("href");<br />
          var sOutput = ( "target id : " + sHrefAttr );<br />
      } else {<br />
          var sOutput = ( "target id : null" );<br />
      }<br />
<br />
      document.getElementById("output").innerHTML = sOutput;<br />
    }<br />
  &lt;/script&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body onload="GetAttr()"&gt;<br />
   &lt;a class="emxas" id="target_id" name="target_name" href="http://www.emxas.co.jp/index.html"&gt;エムザス株式会社&lt;/a&gt;<br />
   &lt;div id="output"&gt;Output appears here.&lt;/div&gt;<br />
&lt;/body&gt;<br />
</div>　　【結果】<br />
　　　　『IE7』<br />
　　　　　　target id : http://www.emxas.co.jp/index.html　　　← 大文字小文字を区別しないため、取得できる<br />
　　　　『IE8』<br />
　　　　　　target id : null　　　　　　　　　　　　　　　　　　　　　　　← 大文字小文字を区別するため、該当無しとなる<br />
<br />
<br />
■getAttributeメソッド<br />
<br />
　●属性名の大文字小文字の区別<br />
<br />
　　既存のIEではgetAttributeメソッドで指定する属性名について、大文字小文字の区別有無を指定することができました。<br />
　　　　getAttribute("Href")　　　　　属性名の大文字小文字を区別しない（デフォルト）<br />
　　　　getAttribute("Href",0)　　　　属性名の大文字小文字を区別しない<br />
　　　　getAttribute("Href",1)　　　　属性名の大文字小文字を区別する<br />
<br />
　　IE8では、オプションの指定有無に係らず、大文字小文字を区別しないように変更されました。<br />
<br />
　　【サンプルコード】<div class="itl_source">&lt;head&gt;<br />
  &lt;title&gt;Example1&lt;/title&gt;<br />
  &lt;script&gt;<br />
    function GetAttr(){<br />
      var obj = document.getElementById("link");<br />
      var sHref1Attr = obj.getAttribute("Href");<br />
      var sHref2Attr = obj.getAttribute("Href",0);<br />
      var sHref3Attr = obj.getAttribute("Href",1);<br />
      var sOutput = ("getAttribute no option : " + sHref1Attr +<br />
                     &lt;br/&gt; + "getAttribute option 0 : " + sHref2Attr +<br />
                     &lt;br/&gt; + "getAttribute option 1 : " + sHref3Attr );<br />
      document.getElementById("output").innerHTML = sOutput;<br />
    }<br />
  &lt;/script&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body onload="GetAttr()"&gt;<br />
   &lt;a class="emxas" id="link" href="http://www.emxas.co.jp/index.html"&gt;エムザス株式会社&lt;/a&gt;<br />
   &lt;div id="output"&gt;Output appears here.&lt;/div&gt;<br />
&lt;/body&gt;<br />
</div>　　【結果】<br />
　　　　『IE7』<br />
　　　　　　getAttribute no option : http://www.emxas.co.jp/index.html<br />
　　　　　　getAttribute option 0 : http://www.emxas.co.jp/index.html<br />
　　　　　　getAttribute option 1 : null　　　　←　大文字小文字を区別するため、該当無しとなる<br />
　　　　『IE8』<br />
　　　　　　getAttribute no option : http://www.emxas.co.jp/index.html<br />
　　　　　　getAttribute option 0 : http://www.emxas.co.jp/index.html<br />
　　　　　　getAttribute option 1 : http://www.emxas.co.jp/index.html　　　　←　区別しないため、取得できる<br />
<br />
<br />
　●ＵＲＬの取得<br />
<br />
　　getAttribute("href")でURLを取得する場合、取得内容が変更されました。<br />
　　　　IE7：絶対URL<br />
　　　　IE8：相対URL<br />
<br />
　　【サンプルコード】<div class="itl_source">&lt;head&gt;<br />
  &lt;title&gt;Example1&lt;/title&gt;<br />
  &lt;base href="http://www.emxas.co.jp/"&gt;<br />
  &lt;script&gt;<br />
    function GetAttr(){<br />
      var obj = document.getElementById("link");<br />
      var sHrefAttr = obj.getAttribute("href");<br />
      var sOutput = ("href value: " + sHrefAttr);<br />
      document.getElementById("output").innerHTML = sOutput;<br />
    }<br />
  &lt;/script&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body onload="GetAttr()"&gt;<br />
   &lt;a class="emxas" id="link" href="index.html"&gt;エムザス株式会社&lt;/a&gt;<br />
   &lt;div id="output"&gt;Output appears here.&lt;/div&gt;<br />
&lt;/body&gt;<br />
</div>　　【結果】<br />
　　　　『IE7』<br />
　　　　　　href value: http://www.emxas.co.jp/index.html<br />
　　　　『IE8』<br />
　　　　　　href value: index.html<br />
<br />
　　　※IMGタグ等で用いられるsrc属性等も同様な扱いとなっています。<br />
<br />
<br />
■class属性の取り扱い<br />
<br />
　今までのIEではgetAttributeメソッド等でclass属性を扱う際、属性名を'className'としなければなりませんでした。<br />
　IE8では、属性値を'class'で扱えるように変更されました。<br />
　※既存の'className'では、対象の属性が存在しないため null となります。<br />
<br />
　　IE7:○　IE8:×　　getAttribute('className')<br />
　　IE7:×　IE8:○　　getAttribute('class')<br />
<br />
　【サンプルコード】<div class="itl_source">&lt;head&gt;<br />
  &lt;title&gt;Example1&lt;/title&gt;<br />
  &lt;base href="http://www.emxas.co.jp/"&gt;<br />
  &lt;script&gt;<br />
    function GetAttr(){<br />
      var obj = document.getElementById("link");<br />
      var sClass1Attr = obj.getAttribute("classname");<br />
      var sClass2Attr = obj.getAttribute("class");<br />
      var sOutput = ("className value: " + sClass1Attr +<br />
                     &lt;br /&gt; + "class value: " + sClass2Attr);<br />
      document.getElementById("output").innerHTML = sOutput;<br />
    }<br />
  &lt;/script&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body onload="GetAttr()"&gt;<br />
   &lt;a class="emxas" id="link" href="index.html"&gt;エムザス株式会社&lt;/a&gt;<br />
   &lt;div id="output"&gt;Output appears here.&lt;/div&gt;<br />
&lt;/body&gt;<br />
</div>　【結果】<br />
　　　『IE7』<br />
　　　　　className value: emxas<br />
　　　　　class value: null　　　　　　　　← 'class'では取得できない<br />
　　　『IE8』<br />
　　　　　className value: null　　　　← 'className'では取得できない<br />
　　　　　class value: emxas<br />
]]></description>
 <category>JS・CSS・ブラウザ</category>
<comments>http://www.emxas.co.jp/itblog/?itemid=275</comments>
 <pubDate>Mon, 19 Oct 2009 00:00:00 +0900</pubDate>
</item>
  </channel>
</rss>
