HTML Applications その１

## はじめに

いままで、JScript関連についていろいろ書いてきましたが、GUIが必要なケースがあると思います。
そんな時に使うのが、「HTML Applications」です。

## HTML Applications

簡単に言うと、HTMLの拡張子を「hta」に変えたもので、HEADタグ内にHTA:APPLICATIONタグが必要になります。

簡単なサンプルです。

```html:sample01.hta
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <HTA:APPLICATION
        ID="oHTA"
        APPLICATIONNAME="name"
        BORDER="thick"
        BORDERSTYLE="normal"
        CAPTION="yes"
        CONTEXTMENU="yes"
        ICON="./icon.ico"
        INNERBORDER="yes"
        MAXIMIZEBUTTON="yes"
        MINIMIZEBUTTON="yes"
        NAVIGABLE="no"
        SCROLL="yes"
        SCROLLFLAT="no"
        SELECTION="yes"
        SHOWINTASKBAR="yes"
        SINGLEINSTANCE="no"
        SYSMENU="yes"
        VERSION="0.0.1"
        WINDOWSTATE="normal"
    />
    <title>HTA SAMPLE 01</title>
</head>
<body>
HTAサンプル01
</body>
</html>
```

HTA:APPLICATIONタグに、沢山の属性があります。

__ID__

スクリプト内でオブジェクトとして利用する場合、ここで設定した名称で利用できます。

__APPLICATIONNAME__ 

アプリケーション名です。

__BORDER__

ウィンドウのボーダを設定します。

|値|説明|
|:--|:--|
|thick|デフォルト値、通常のIEと同じ？|
|dialog|サイズが変更出来なくなります。|
|none|周りの枠が無くなります。|
|thin|「dialog」と同じ？|

__BORDERSTYLE__

コンテンツのボーダを設定します。
これも、BORDERと同様MSDNでは以下が設定できると記述していますが、
私の環境（IE11）では「sunken」系だけ、ちょっと違うかなという程度でした。

|値|説明|
|:--|:--|
|normal|デフォルト値、通常のIEと同じ？|
|complex|「raised」と「sunken」混合？|
|raised|「raised」？|
|static|？？？|
|sunken|「sunken」？|

「raised」と「sunken」については、[ここ](http://msdn.microsoft.com/en-us/library/windows/desktop/bb226804(v=vs.85).aspx)を参照願います。

__CAPTION__

タイトルバーの表示（ __yes__ 、デフォルト値）、非表示（ __no__ ）を設定します。
非表示（no）に設定する場合は、scriptでウィンドウをクローズするボタンを作成しておかないと、タスクマネージャから消すことになります。
また、ウィンドウの移動もできなくなるので気をつけて下さい。

__CONTEXTMENU__

コンテンツ内でマウスの右クリック時にメニューを出す（ __yes__ 、デフォルト値）か、出さない（ __no__ ）かを設定します。
SELECTION属性が「no」の場合、この設定は意味をなさず「no」となります。

__ICON__

タイトルバーの左に表示するアイコンのパス（相対でも可）を設定します。
32ピクセルx32ピクセルの「.ico」フォーマットのファイルのみとなっています。

__INNERBORDER__

内側のボーダを3Dにする（ __yes__ 、デフォルト値）か、3Dにしない（ __no__ ）かを設定します。

__MAXIMIZEBUTTON__

タイトルバー右側の最大ボタンを表示する（ __yes__ 、デフォルト値）か、表示しないか（ __no__ ）を設定します。

__MINIMIZEBUTTON__

タイトルバー右側の最小ボタンを表示する（ __yes__ 、デフォルト値）か、表示しないか（ __no__ ）を設定します。

__NAVIGABLE__

リンクされているドキュメントをHTAアプリケーション内に表示する（ __yes__ ）か、新しいウィンドウで表示する（ __no__ 、デフォルト値）かを設定します。

例えば、aタグのリンクを押下した時に、この設定値が「yes」なら、このウィンドウ内で遷移しますが、「no」であれば新しいウィンドウで遷移します。

__SCROLL__

スクロールバーを出す（ __yes__ 、デフォルト値）か、出さない（ __no__ ）か、自動（ __auto__ ）を設定します。
私の環境（IE11）では、「yes」と「auto」では挙動が同じでした。

__SCROLLFLAT__

スクロールバーをフラットにするか（ __yes__ ）、通常（ __no__ 、デフォルト値）を設定します。
私の環境（IE11）では、どれを設定しても変化がありませんでした。

__SELECTION__

コンテンツ内の選択を可能（ __yes__ 、デフォルト値）か、不可能（ __no__ ）かを設定します。

__SHOWINTASKBAR__

HTAアプリケーションをタスクバーに表示させる（ __yes__ 、デフォルト値）か、表示させない（ __no__ ）かを設定します。

__SINGLEINSTANCE__

同じAPPLICATIONNAME属性の値をもつHTAアプリケーションを複数起動可能（ __no__ 、デフォルト値）か、１インスタンスのみ起動可能（ __yes__ ）かを設定します。
私の環境（IE11）では、どちらを設定しても複数起動されました。

__SYSMENU__

タイトルバーのアイコン、最小化、最大化、終了の表示（ __yes__ 、デフォルト値）か、表示しない（ __no__ ）かを設定します。

__VERSION__

バージョンを設定します。

__WINDOWSTATE__

初期起動時、ウィンドウをどのように表示するかを設定します。

|値|説明|
|:--|:--|
|normal|デフォルト値、通常|
|minimize|最小化して表示|
|maximize|最大化して表示|


---

## IEのバージョン

「JSON」オブジェクトを使おうと思ったら、htaで使えなかったので調べてみたところ、「X-UA-Compatible」でIEのバージョンを指定すると使えるようになりました。
ところが、「HTA:APPLICATION」タグでの設定が一部効かなくなってしまいました。


```html
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
```

#### 設定しても効かない属性

* __BORDER__
* __BORDERSTYLE__
* __INNERBORDER__　
* __SCROLL__
* __SHOWINTASKBAR__
* __SINGLEINSTANCE__

#### 挙動が変わった属性

* __MAXIMIZEBUTTON__　表示/非表示ではなく押下可能/不可能に変わった
* __MINIMIZEBUTTON__　表示/非表示ではなく押下可能/不可能に変わった


という事で、「X-UA-Compatible」を使う場合のサンプルです。

```html:sample02.hta
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <HTA:APPLICATION
        ID="oHTA"
        CAPTION="yes"
        CONTEXTMENU="yes"
        ICON="./icon.ico"
        NAVIGABLE="no"
        SELECTION="yes"
        SYSMENU="yes"
        VERSION="0.0.1"
        WINDOWSTATE="normal"
    />
    <title>HTA SAMPLE 02</title>
</head>
<body>
HTAサンプル02
</body>
</html>
```

ちょっと調査に時間がかかりすぎたので、今回はここまでです。