メインコンテンツまでスキップ
バージョン: 次へ

Webエリア

Webエリアは、静的および動的な HTMLページ、ファイル、ピクチャー、JavaScript などの様々な Webコンテンツをフォーム中で表示することのできるオブジェクトです。 Web エリアのレンダリングエンジンは、アプリケーションの実行プラットフォームと選択したレンダリングエンジンオプション に応じて変化します。

同じフォーム内に複数の Webエリアを配置できます。 しかしながら、Webエリアの使用には いくつかの制約 がつく事に注意して下さい。

いくつかの専用の標準アクション 、多数の ランゲージコマンド、そして汎用および専用の フォームイベント を使用することで、Webエリアの機能を管理することができます。 特別な変数を使用して、エリアと 4D環境間で情報を交換することも可能です。

特有のプロパティ

割り当てられる変数

Webエリアには 2つの特別な変数が自動で割り当てられます:

  • URL --Web エリアが表示するURL をコントロールします。
  • Progression -- Web エリア内に表示されているページのロード率をコントロールします。

4D v19 R5 以降、Progression 変数は、Windows のシステムレンダリングエンジン を使用しているWeb エリアにおいては更新されなくなりました。

Webレンダリングエンジン

アプリケーションの使用に応じて、Web エリアでは2つのレンダリングエンジン からどちらを使用するかを選択することができます。

"埋め込みWebレンダリングエンジンを使用" プロパティを選択している場合、"4Dメソッドコールを許可" プロパティが選択可能になり、また、macOS と Windows 上の動作が同様であるようにできます。 Webエリアがインターネットに接続されている場合には、最新のセキュリティアップデートの恩恵を受けられるため、システムレンダリングエンジンを選択することが推奨されます。

4Dメソッドコールを許可

4Dメソッドコールを許可 プロパティが選択されている場合、Web エリアから4D メソッドを呼び出すことができます。

注記
  • この機能は Webエリアが 埋め込みWebレンダリングエンジンを使用 している場合に限り、使用可能です。
  • このオプションは 4Dコードの実行を許可するため、セキュリティ上の理由から、アプリケーションによって生成されたページなど、信頼できるページに対してのみ有効にするべきです。

$4d Object

The 4D embedded web rendering engine provides a JavaScript object named $4d in the web area. By default, $4d allows access to all 4D project methods using dot notation.

For example, calling the HelloWorld method in 4D:

$4d.HelloWorld();

Note: JavaScript is case-sensitive, so the object is named $4d (with a lowercase "d").

Controlling $4d Access

With WA SET CONTEXT OBJECT, developers can control what can be available through $4d from a Web Area. Using this command you define a context object that declares for example 4D methods through formulas and class instances.

To check the currently defined context, use WA Get context object.

For more information, please refer to WA SET CONTEXT OBJECT.

Calling 4D Methods from JavaScript

4Dメソッドへの呼び出しのシンタックスは以下のようになります:

$4d.4DMethodName(param1,paramN,function(result){})
  • param1...paramN: 4Dメソッドに対して必要なだけ引数を渡すことができます。 これらの引数は、JavaScript にサポートされている型であればどんなものでも渡せます (文字列、数値、配列、オブジェクト)。

  • function(result): 最後の引数として渡される関数です。 この "コールバック" 関数は、4Dメソッドが実行を終えると同時に呼び出されます。 この関数は result 引数を受け取ります。

  • result: 4D メソッドの実行結果。 戻り値は JavaScript でサポートされている型 (文字列、数値、配列、オブジェクト) のいずれかになります。

デフォルトとして、4Dは UTF-8 文字コードで動作しています。 (アクセントが付いた文字などの) 拡張文字を含むテキストを返す場合には、Webエリアで表示されるページの文字コードが UTF-8 に宣言されていることを確認してください。文字コードが UTF-8 でない場合、文字が正しく表示されない可能性があります。 この場合、HTML ページに以下の行を追加してエンコーディングを宣言して下さい: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

例題 1

today という名の 4Dプロジェクトメソッドがあり、そのメソッドは引数を受け付けず、カレントの日付を文字列として返す場合について考えてみます。

today メソッドの 4Dコードです:

#DECLARE -> $result : Text
$result := String(Current date;System date long)

Webエリアでは、 4Dメソッドは以下のシンタックスで呼び出し可能です:

$4d.today()

この 4Dメソッドは引数を受け取りませんが、メソッドの実行後に結果を、4Dによって呼び出されるコールバック関数へと返します。 Webエリアによってロードされた HTMLページ内にこの日付を表示します。

HTMLページのコードです:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
$4d.today(function(result)
{
var curDate = result;
document.getElementById("mydiv").innerHTML=curDate;
});
</script>
</head>
<body>Today is: <div id="mydiv"></div>
</body>
</html>

例題 2

Instead of using a standalone method, we can also define a class to handle the calculation.

Define the Class with 4D project method calcSum which receives parameters and returns their sum:

// SumCalculator user class

Function calcSum(... : Real) -> $sum : Real
// receives n Real type parameters
// and returns a Real
var $i; $n : Integer
$n := Count parameters

For ($i; 1; $n)
$sum += ${$i}
End for

In another method, we create an instance and assign it to $4d

var $myCalculator := cs.SumCalculator.new()
WA SET CONTEXT OBJECT(*; "myWebArea"; $myCalculator)

Webエリア内で実行される JavaScript コードです:

$4d.calcSum(33, 45, 75, 102.5, 7, function(theSum)
{
var result = theSum // 結果は 262.5
});

標準アクション

Webエリアを自動で管理するために、4つの特別な自動アクションを使用できます: Open Back URLOpen Forward URLRefresh Current URL そしてStop Loading URL です。 ボタンやメニューコマンドにこれらのアクションを割り当てることで、基本の Webインターフェースを素早く実装できます。 これらのアクションは、標準アクション のページに詳細な説明があります。

フォームイベント

特定のフォームイベントは、Webエリアをプログラミングで管理するこを目的としています。すなわち、リンクの起動に関連しています:

更に、Webエリアは以下の汎用フォームイベントをサポートしています:

Webエリアのルール

ユーザーインターフェース

フォームが実行されると、他のフォームエリアとの対話を可能にする、標準のブラウザーインタフェース機能が Web エリア内で利用可能になります。

  • 編集メニューコマンド: Webエリアにフォーカスがあるとき、編集 メニューコマンドを使用してコピーやペースト、すべてを選択などのアクションを選択に応じて実行できます。
  • コンテキストメニュー: Web エリアでは、システムの標準のコンテキストメニュー を使用することができます。 コンテキストメニューの表示はWA SET PREFERENCE コマンドを使用することによってコントロール可能です。
  • ドラッグ&ドロップ: 4D のオブジェクトプロパティに基づき、ユーザーは Webエリア内で、または Webエリアと 4Dフォームオブジェクト間で、テキストやピクチャー、ドキュメントをドラッグ&ドロップできます。 セキュリティ上の理由から、ファイルまたは URL のドラッグ&ドロップによって Webエリアのコンテンツを変更することは、デフォルトで禁止されています。 この場合、カーソルは"禁止"アイコン を表示します。 "ドロップ" アイコンを表示し、On Window Opening Denied イベントを発生させるには、WA SET PREFERENCE(*;"warea";WA enable URL drop;True) 文を使う必要があります。 このイベントにおいては、WA OPEN URL コマンドを呼び出すか、またはURL 変数 を設定することでユーザードロップに対応することができます。

上記のドラッグ&ドロップ機能はmacOS のシステムレンダリングエンジン を使用したWeb エリアではサポートされていません。

サブフォーム

ウィンドウの再描画機構に関わる理由から、サブフォームに Webエリアを挿入する場合には以下の制約がつきます:

  • サブフォームをスクロール可能にしてはいけません。
  • Webエリアのサイズがサブフォームのサイズを超えてはいけません。

他のフォームオブジェクトの上や下に Webエリアを重ねることはサポートされていません。

Webエリアと Webサーバーのコンフリクト (Windows)

Windows においては、Webエリアから、同じ 4Dアプリケーションで起動中の Webサーバーへのアクセスはお勧めできません。これをおこなうとコンフリクトが発生し、アプリケーションがフリーズすることがあります。 もちろん、リモートの 4D から 4D Server の Webサーバーにアクセスすることはできます。自身の Webサーバーにアクセスできないということです。

プロトコルの挿入 (macOS)

macOS 上の Webエリアで、プログラムにより処理される URL は、プロトコルで開始されていなければなりません。 つまり、"www.mysite.com" ではなく、"http://www.mysite.com" 文字列を渡さなければならないということです。

Webインスペクターへのアクセス

オフスクリーンの Webエリアや、フォームのWeb エリア内において、Webインスペクターを見たり使用したりすることができます。 Webインスペクターは、埋め込みWebエンジンによって提供されているデバッガーです。 Webページの情報の、コードとフローを解析します。

Webインスペクターを表示させるには、WA OPEN WEB INSPECTOR コマンドを実行するか、 Webエリアのコンテキストメニューを使用します。

  • WA OPEN WEB INSPECTOR コマンドを実行する
    このコマンドは、オンスクリーンのWeb エリア(フォームオブジェクト)とオフスクリーンのWeb エリアでも直接使用することができます。

  • Web エリアのコンテキストメニューを使用する
    この機能はオンスクリーンのWeb エリアでのみ使用することができ、以下の条件を満たしている必要があります:

  • Web エリアにおいてコンテキストメニュー が有効化されている

  • インスペクターの使用が、以下の宣言を用いて明示的に有効化されている:

	WA SET PREFERENCE(*;"WA";WA enable Web inspector;True)  

Windows のシステムレンダリングエンジン の場合にこの環境設定を変更すると、変更を反映するのにエリア内でのナビゲーション操作 (たとえば、ページの更新など) が必要です。

より詳細な情報については、WA SET PREFERENCE コマンドの説明を参照して下さい。

上記のとおり設定を完了すると、エリア内のコンテキストメニュー内に 要素を調査 という新しいオプションが追加されているはずです: この項目を選択すると、Webインスペクターウィンドウが表示されます。

このデバッガーの機能の詳細に関しては、Webレンダリングエンジンにより提供されているドキュメントを参照してください。

プロパティ一覧

Border Line Style - Bottom - Class - Context Menu - Height - Horizontal Sizing - Left - Method - Object Name - Progression - Right - Top - Type - URL - Use embedded Web rendering engine - Variable or Expression - Vertical Sizing - Visibilty - Width

4DCEFParameters.json

4DCEFParameters.json は4D アプリケーション内でのWeb エリアの振る舞いを管理するためのCEF パラメーターをカスタマイズすることができる設定ファイルです。

デフォルトスイッチ は提供されていますが、カスタムの4DCEFParameters.json ファイルを使用することでこれらをオーバーライドすることができます。

(4D アプリケーションを使用した)開発フェーズにおいては、以下の場所に4DCEFParameters.json ファイルを作成してください:

  • Windows: Users\[userName]\AppData\Roaming\4D\4DCEFParameters.json
  • macOS: $HOME/Library/Application Support/4D/4DCEFParameters.json

そして最終アプリケーションをビルドする前に、カスタムの4DCEFParameters.json ファイルを、プロジェクトのResources ファイルに追加してください。

警告

カスタムの4DCEFParameters.json ファイルを追加することは、4D View Pro エリア を含め、基本的に4D の全ての埋め込みWeb エリアに影響し得ます。 このカスタムのスイッチが4D アプリケーションを不安定にしないようにするのは開発者の責任です。

4DCEFParameters.json ファイルのフォーマットは以下のようになっています:


{
"switches":{
"key":value
},
"macOS":{
"switches": {
"key":value
}
},
"windows": {
"switches": {
"key":value
}
}
}

4DCEFParameters.json ファイルのストラクチャーには以下のものが含まれます:

  • switches: macOS とWindows の両OS において適用されるCEF スイッチとそれに対応する値の一覧。
  • macOS.switches: macOS 専用のCEF スイッチ。
  • windows.switches: Windows 専用のCEF スイッチ。

カスタムファイル内のスイッチが優先されます。 カスタムファイル内のスイッチが優先されます。 同一ファイル内においてスイッチが重複して定義されていた場合、プラットフォーム固有のサブセクション内 ("macOS.switches" or "windows.switches")で定義されているスイッチが優先され、設定として使用されます。

サポートされているスイッチの一覧は常に進化しており、CEF 開発チームによって管理されています。 利用可能なスイッチ一覧については、CEF デベロッパーコミュニティを参照する必要があります。

例題

デフォルトファイル

デフォルトの4DCEFParameters.json ファイルには以下のスイッチが格納されています:

{
"switches":{
"enable-media-stream":true,
"enable-print-preview":true
},
"macOS":{
"switches": {
"use-mock-keychain": true
}
},
"windows": {
"switches": {
"disable-features": "WinUseBrowserSpellChecker"
}
}
}

デフォルトのスイッチを無効化する例題

{
"switches": {
"disable-javascript": true,
"disable-web-security": true
}
}

Autoplay の例題

{
"switches":{
"autoplay-policy": "no-user-gesture-required"
}
}

参照

Specify your own parameters to initialize the embedded web area (blog 記事)