ページの先頭行へ戻る
WSMGR for Web V7.2 使用手引書L40
FUJITSU Software

32.1.1 スクリプトの記述


■HTMLファイルの構成

HTMLファイルは、初期化を行う部分、処理を記述する部分および、WSMGR for Webを表示する部分に分かれます。


HTMLファイルの構成の概念図を以下に示します。

注意

  • F5AAINETCTLはf5aainet2.cabファイルにパッケージ化されています。
    OBJECTタグのCLSIDは「5AA57A9F-F528-4930-9D3A-4BFFEA6E5033」を指定してください。また、codeBaseはWSMGR for Webの仮想ディレクトリを指すように「f5aainet2.cab」を指定し、#Version指定は「7,2,20,1」を指定してください。

  • HTMLのフレームを使用する場合はF5AAINETCTLオブジェクトをトップ(FRAMESETを定義するHTML)に配置してください。

  • 複数のHTMLページでF5AAINETCTLを使用する場合は、F5AAINETCTLのロードと初期化が同時に行われないように記述に注意してください。

  • F5AAUIMAINオブジェクトをHTMLで利用する場合は、下記サンプルのように記述してください。

実際に動作するHTMLのサンプルは次のようになります。


■JavaScriptの例

1)メインソース

<HTML>
<HEAD>
<TITLE>WSMGR for Web スクリプトサンプル</TITLE>
<OBJECT
    classid=clsid:5AA57A9F-F528-4930-9D3A-4BFFEA6E5033
    codeBase=../f5aainet2.cab#Version=7,2,20,1
    id=F5AAINETCTL height=1 width=1 border=0>
</OBJECT>
<!--
//***************************************************************************
 codeBaseに指定されている「../」はWSMGR for Webの仮想ディレクトリへの絶対パス、
 または、相対パスとなるように書き換えてください。
 但し、絶対パスを指定する場合は「http://サーバ名」は省略しないでください。
 例)
 絶対パス:「codeBase=http://www.example/wsmgrweb/f5aainet2.cab#Version=7,2,20,1」
 相対パス:「codeBase=../f5aainet2.cab#Version=7,2,20,1」
//***************************************************************************
-->
</HEAD>

<BODY LANGUAGE=javascript oncut="Cancel();" onpaste="Cancel();" oncopy="Cancel();" 
onselect="Cancel();" onbeforeunload="beforeunloadMsg();" onunload="onUnload();" 
onfocus="onFocus();" onLoad="onResize();" onResize="onResize();">

<SCRIPT LANGUAGE=javascript src="wsobject.js"></SCRIPT>
<SCRIPT LANGUAGE=javascript>
<!--
//*** ここを書き換えてください **********************************************
F5AAINETCTL.url = location.href + F5AAINETCTL.codeBase;// WSMGR for WebのURL
F5AAINETCTL.user = "user1";              // ユーザ名
F5AAINETCTL.pw = "password";             // パスワード
F5AAINETCTL.icon = "接続1";              // 接続アイコン名
//*** ここまで **************************************************************

//***************************************************************************
// F5AAINETCTL.urlはWSMGR for Webの仮想ディレクトリのURLとなるように書き換えて
// ください。但し、「http://サーバ名」は省略しないでください。
// 例)
// 直接指定          :「F5AAINETCTL.url = "http://www.example/wsmgrweb/";」
// codeBaseが絶対パス:「F5AAINETCTL.url = F5AAINETCTL.codeBase;」
// codeBaseが相対パス:「F5AAINETCTL.url = location.href + F5AAINETCTL.codeBase;」
//***************************************************************************

ret = F5AAINETCTL.init();
if(ret != 0)
{
          alert("初期化エラーです。");
}

if(F5AAINETCTL.IsReady)
{
    UimainActiveXCall(F5AAINETCTL.PropID);
}
function onFocus()
{
    if(F5AAINETCTL.IsReady)
        F5AAUIMAIN.OnHtmlSetFocus();
}
function onUnload()
{
    if(F5AAINETCTL.IsReady)
        F5AAUIMAIN.OnHtmlUnLoad();
}
function beforeunloadMsg()
{
    if(F5AAINETCTL.IsReady)
    {
        var msg = F5AAUIMAIN.OnHtmlBeforeUnload();
        if(msg.length != 0)
                event.returnValue = msg;
    }
}
function onResize()
{
    if(F5AAINETCTL.IsReady)
    {
            var width = document.body.clientWidth;
            var height = document.body.clientHeight;
                F5AAUIMAIN.OnHtmlReSize(width,height);
    }
}
function Cancel()
{
    event.returnValue = false;
}

-->
</SCRIPT>

</BODY>
</HTML>

2)外部オブジェクトソース(wsobject.js

function UimainActiveXCall(param)
{
    document.write("<p>");
    document.write("<OBJECT ID='F5AAUIMAIN'");
    document.write("CLASSID='CLSID:2AE746E2-7F2E-11D4-BBD2-004854002478'");
    document.write("border='0' VIEWASTEXT>");
    document.write("<PARAM NAME='PropFile' VALUE=" + param + ">");
    document.write("</OBJECT>");
    document.write("</p>");
}

■VBScriptの例

1)メインソース

<HTML>
<HEAD>
<TITLE>WSMGR for Web スクリプトサンプル</TITLE>
<OBJECT
    classid=clsid:5AA57A9F-F528-4930-9D3A-4BFFEA6E5033 
    codeBase=../f5aainet2.cab#Version=7,2,20,1
    id=F5AAINETCTL height=1 width=1 border=0>
</OBJECT>
<!--
//***************************************************************************
 codeBaseに指定されている「../」はWSMGR for Webの仮想ディレクトリへの絶対パス、
 または、相対パスとなるように書き換えてください。
 但し、絶対パスを指定する場合は「http://サーバ名」は省略しないでください。
 例)
 絶対パス:「codeBase=http://www.example/wsmgrweb/f5aainet2.cab#Version=7,2,20,1」
 相対パス:「codeBase=../f5aainet2.cab#Version=7,2,20,1」
//***************************************************************************
-->
</HEAD>
<BODY LANGUAGE=vbscript oncut="Cancel()" onpaste="Cancel()" oncopy="Cancel()" 
onselect="Cancel()" onbeforeunload="beforeunloadMsg()" onunload="onUnload()" 
onfocus="onFocus()" onLoad="onResize()" onResize="onResize()">

<SCRIPT LANGUAGE=vbscript src="wsobject.vbs"></SCRIPT>
<SCRIPT LANGUAGE=vbscript>
<!--
'*** ここを書き換えてください ***********************************************
F5AAINETCTL.url = document.url &  F5AAINETCTL.codeBase  ' WSMGR for WebのURL
F5AAINETCTL.user = "user1"   ' ユーザ名
F5AAINETCTL.pw = "password"  ' パスワード
F5AAINETCTL.icon = "接続1"   ' 接続アイコン名
'*** ここまで ***************************************************************

'****************************************************************************
' F5AAINETCTL.urlはWSMGR for Webの仮想ディレクトリのURLとなるように書き換えて
' ください。但し、「http://サーバ名」は省略しないでください。
' 例)
' 直接指定          :「F5AAINETCTL.url = "http://www.example/wsmgrweb/"」
' codeBaseが絶対パス:「F5AAINETCTL.url = F5AAINETCTL.codeBase」
' codeBaseが相対パス:「F5AAINETCTL.url = document.url &  F5AAINETCTL.codeBase」
'****************************************************************************
ret = F5AAINETCTL.init
If ret <> 0 Then
    alert "初期化エラーです。"
End If

If F5AAINETCTL.IsReady Then
    UimainActiveXCall(F5AAINETCTL.PropID)
End If

Sub onFocus()
    If F5AAINETCTL.IsReady Then
        F5AAUIMAIN.OnHtmlSetFocus
    End If
End Sub

Sub onUnload()
    If F5AAINETCTL.IsReady Then
        F5AAUIMAIN.OnHtmlUnLoad
    End If
End Sub

Sub beforeunloadMsg()
    Dim msg
    If F5AAINETCTL.IsReady Then
        msg = F5AAUIMAIN.OnHtmlBeforeUnload
        If msg <> "" Then
            window.event.returnValue = msg
        End If
    End If
End Sub

Sub onResize()
    If F5AAINETCTL.IsReady Then
        doc_height = document.body.clientHeight
        doc_width  = document.body.clientWidth
        F5AAUIMAIN.OnHtmlReSize doc_width, doc_height
    End IF
End Sub

Sub Cancel()
    window.event.returnValue = false
End Sub
-->
</SCRIPT>

</BODY>
</HTML>

2)外部オブジェクトソース(wsobject.vbs)

Sub UimainActiveXCall(param)
    document.write "<p>"
    document.write "<OBJECT"
    document.write " ID=F5AAUIMAIN"
    document.write " CLASSID=CLSID:2AE746E2-7F2E-11D4-BBD2-004854002478"
    document.write " border=1 VIEWASTEXT>"
    document.write "<PARAM NAME=PropFile VALUE=" & param & ">"
    document.write "</OBJECT>"
    document.write "</p>"
End Sub

また、スクリプトの作成作業を容易にするためにサンプルHTMLを用意しました。


サンプルHTMLの格納先は次のようになります。

<インストール先フォルダ配下>\wwwroot\sample\
例) C:\wsmgrweb\wwwroot\sample\

サンプルHTMLのURLは次のようになります。

<WebサーバのURL>/<仮想ディレクトリ>/sample/
例) http://www.example/wsmgrweb/sample/

サンプルHTMLの構成は以下のとおりです。

サンプルHTMLについて

default.htm

基本サンプル(ノーフレーム)

JSample0.htm

基本サンプル(フレーム)

JSample1.htm、JMenu1.htm、JDspemu.htm

指定ログオンサンプル

JSample2.htm、JDspemu2.htm

接続アイコン取得サンプル

JSample3.htm、JMenu3.htm、JDspemu.htm

処理サンプル

JSample4.htm、JMenu4.htm、JDspemu.htm

メソッド呼び出しサンプル

JSample5.htm、JMenu5.htm、JDspemu.htm

注意

  • 基本サンプル、処理サンプルのHTMLはユーザ名、パスワード、接続アイコン名をユーザ環境に合わせて書き換える必要があります。

  • 各サンプルのHTMLはエラーメッセージをユーザ環境・動作に合わせて書き換えて利用してください。


■HTMLへ記述の必要なイベント

エミュレータの正しい動作を保証するために、HTMLファイルへ記述することを求めるイベントがいくつかあります。次にそのイベントを取得するイベントハンドラと、呼び出しを求めるメソッドを挙げます。


動作の抑止処理を求めるイベントを取得するイベントハンドラ

次のイベントハンドラでは、そのイベントに応じた処理を行うメソッドをF5AAUIMAINオブジェクトより呼び出すようにします。
このイベントハンドラは必ず定義する必要があります。


●イベントハンドラからの関数呼び出し例

JavaScriptを用いて記述した例
<BODY onbeforeunload="onBeforeUnloadMsg()">

function onBeforeUnloadMsg()
{
F5AAUIMAIN.OnHtmlbeforeunload();
}
VBScriptを用いて記述した例
<BODY onbeforeunload="onBeforeUnloadMsg()">

Sub onBeforeUnloadMsg()
      F5AAUIMAIN.OnHtmlBeforeUnload
End Sub

ロード、リサイズ時にはリサイズ処理メソッド OnHtmlResize()を呼び出す必要があります。

OnHtmlResize

ドキュメントの高さと幅を引数として渡す必要があります。次にその例を挙げます。


●イベントハンドラからの関数呼び出し例

JavaScriptを用いて記述した例
<BODY onload="onResize()">
function onResize()
{
    var width = document.body.clientWidth;
    var height = document.body.clientHeight;

    F5AAUIMAIN.OnHtmlReSize(width, height);
}
VBScriptを用いて記述した例
<BODY onload="onResize()">
Sub onResize()
    Width  = document.body.clientWidth
    height = document.body.clientHeight
    F5AAUIMAIN.OnHtmlReSize width, height
End Sub

■HTMLのフレームを使用する場合の記述(参考)

HTMLのフレームを使用しF5AAINETCTLオブジェクトとF5AAUIMAINオブジェクトがそれぞれ別のフレームに存在する場合は、F5AAUIMAINオブジェクトがロードされていない状態が存在します。この状態でF5AAUIMAINオブジェクトを操作すると例外が発生しますので、この場合、F5AAUIMAINオブジェクトのロードが完了したかを判定し、ロードが完了している場合にF5AAUIMAINオブジェクトを操作するようにしてください。


●F5AAUIMAINオブジェクトのロード完了判定の例

※F5AAUIMAINオブジェクトはdspemuフレームに存在する。

JavaScriptを用いて記述した例
//F5AAUIMAINオブジェクトのロード完了判定処理
function LoadCheck()
{
    try
    {
        obj = parent.dspemu.F5AAUIMAIN.Macro;
    }
    catch(e)
    {
        return false;
    }
    return true;
}
function doxxx()
{
    if(LoadCheck())
    {
        //ここに処理を記述します
    }
}
VBScriptを用いて記述した例
'F5AAUIMAINオブジェクトのロード完了判定処理
Function LoadCheck()
    On Error Resume Next
    Dim obj
    Set obj = parent.dspemu.F5AAUIMAIN.Macro
    If Err.Number <> 0 Then
        LoadCheck=false
    Else
        LoadCheck=true
    End If
End Function

Sub doxxx()
    If LoadCheck() Then
        'ここに処理を記述します
    End If
End Sub

また、フレームの表示が完了してもF5AAUIMAINオブジェクトのロードが完了していない場合があります。この状態でF5AAUIMAINオブジェクトを操作すると例外が発生しますので、このような状態が発生するような場合(たとえばフレームを表示しすぐにF5AAUIMAINオブジェクトを操作する場合など)は、F5AAUIMAINオブジェクトのロードの完了を待ち合わせて処理を行うようにしてください。


●F5AAUIMAINオブジェクトのロード完了待ち合わせ処理の例

※F5AAUIMAINオブジェクトはdspemuフレームに存在する。

JavaScriptを用いて記述した例
timerID=0;//タイマID
function LoadCheck()
{
    try
    {
        obj = parent.dspemu.F5AAUIMAIN.Macro;
    }
    catch(e)
    {
        return false;
    }
    return true;
}
function doxxx()
{
    if(LoadCheck())
    {
        //タイマを解除します(必須)
        clearInterval(timerID);

        //ここに処理を記述します
    }
}
//1秒間隔でdoxxxを実行します。
timerID = setInterval("doxxx()",1000);
VBScriptを用いて記述した例
timerID=0 'タイマID
Function LoadCheck()
    On Error Resume Next
    Dim obj
    Set obj = parent.dspemu.F5AAUIMAIN.Macro
    If Err.Number <> 0 Then
        LoadCheck=false
    Else
        LoadCheck=true
    End If
End Function

Sub doxxx()
    If LoadCheck() Then
        'タイマを解除します(必須) 
        window.clearInterval(timerID)

        'ここに処理を記述します
    End If
End Sub

'1秒間隔でdoxxxを実行します。
timerID = window.setInterval("doxxx()",1000)