JavaScriptとGuiXTの通信
JavaScript関数の名称
呼び出されるJavaScript関数の名称は任意です。 名前の最大長は255文字です。
ヒント:JavaScriptでは、関数名はASCII文字のみを使用します。
関数名の大文字/小文字
名前で大文字と小文字が区別される関数をJavaScriptで実装することは可能ですが、お勧めしません。 GuiXTからのJavaScript呼び出しでは、名前で大文字と小文字が区別される場合でも(ASCII文字の場合)関数が検出され、名前がまったく同じである場合は正しい関数が呼び出されますが、名前が似ていると少し混乱します。
例:
function abc()
{
return “abc”;
}
function Abc()
{
return “Abc”;
}
function Überschrift()
{
return “Überschrift”;
}
パラメーター
CallJSを使用すると、最大50個のパラメーターを指定できます。 パラメータごとに転送される値の最大長は約8000文字です(長いテキスト変数と構造化変数の転送については、以下で説明します)。
例:次のJavaScript関数は、文字シリーズs内の文字シリーズtの位置を決定します。
function indexOf(s, t)
{
return s.indexOf(t);
}
GuiXTの例:
CallJS x = indexOf “London” “do”
Message “&V[x]”
オプションパラメータ
特に、後でJavaScript関数にパラメーターを追加する場合は、関数を呼び出すすべてのスクリプトを調整する必要がないように、新しいパラメーターのデフォルト値を設定すると便利です。 これは、パラメータが「未定義」タイプであるかどうかを照会することによって行われます。
function split(s, delimiter)
{
// set default delimiter
if (typeof (delimiter) == ‘undefined’) delimiter = “;”;
…
}
可変数のパラメーター
可変数のパラメーターを使用してJavaScript関数を呼び出す場合は、JavaScriptの「arguments」オブジェクトを使用できます。 「引数」はJavaScript配列ではないことに注意してください。ただし、配列の場合と同様に、インデックス0、1、2、…を介して個々のパラメーターにアクセスできます。 必要に応じて、最初にそれらを実際の配列に変換します。
例:次の関数は、可変数の文字列を使用して呼び出すことができます。 文字列をリスト(x、y、…)の形式で返します。
function buildList()
{
// array
var a = [];
// convert arguments list to array
for (var i = 0; i < arguments.length; ++i)
{
a.push(arguments[i]);
};
// return list via “join”
return “(“ + a.join(“,”) + “)”;
}
CallJS mylist = buildList “London” “Rome” “Berlin”
Message “&V[mylist]”
テキスト変数
CallJSのテキスト変数「mytext」の内容を「&text [mytext]」の形式で指定することはお勧めできません。これは、最大長が8000文字に制限されるためです。 代わりに、テキスト変数の名前を入力し、guixt.GetText()を使用してJavaScriptでコンテンツを読み取ります。 同様に、guixt.SetText()を使用して、GuiXTテキスト変数に新しいコンテンツを書き込むことができます。 その場合、長さはどちらの方向にも制限されません。
例:次のJavaScript関数は、テキスト内の単語数をカウントします。
function wordcount(textname)
{
// GuiXT ロングテキスト変数を読む
var s = guixt.getText(textname);
//単語数を数える
var w = s.split(/[^\s]+/).length – 1;
return w;
}
Textbox (2,2) (10,60) name=“mytext”
CallJS n = wordcount “mytext”
Text (11,3) “&V[n] Worte”
構造変数とテーブル変数
GuiXTロングテキスト変数と同様に、JavaScriptからGuiXT構造変数とテーブル変数全体を読み書きすることもできます。 GuiXTはJSON形式(JavaScript Object Notation)をサポートしているため、変換には関数JSON.parse()とJSON.stringify()があれば十分です。
// JavaScriptオブジェクトとしてGuiXTの構造またはテーブル変数を読む
var myobj = JSON.parse(guixt.Get(myvar));
// JavaScriptオブジェクトからGuiXTの構造またはテーブル変数を書く
guixt.Set(mytable, JSON.stringify(myobj));