APEX_JAVASCRIPTパッケージには、動的なJavaScriptコードをHTTP出力に追加するためのユーティリティ・ファンクションが用意されています。通常、このパッケージはプラグイン開発に使用されます。
トピック:
このプロシージャは、サード・パーティのJavaScriptファイルをロードするためのスクリプト・タグを追加し、アプリケーションに関して指定したコンテンツ配信ネットワークも考慮します。サポートされるライブラリは、jQuery、jQueryUIおよびjQuery Mobileです。
構文
add_3rd_party_library_file (
p_library in varchar2,
p_file_name in varchar2,
p_directory in varchar2 default null,
p_version in varchar2 default null );
パラメータ
表13-1に、ADD_3RD_PARTY_LIBRARY_FILEプロシージャで使用可能なパラメータを示します。
表13-1 ADD_3RD_PARTY_LIBRARY_FILEパラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
バージョン、.minおよび.jsを含めずにファイル名を指定します。 |
|
|
ファイル |
|
|
値が指定されていない場合、同じバージョンのApplication Expressの値が使用されます(オプション)。 |
例
この例では、jQuery UIのドラッグ可能な機能のJavaScriptファイルをロードします。
apex_javascript.add_3rd_party_library_file (
p_library =>apex_javascript.c_library_jquery_ui,
p_file_name => 'jquery.ui.draggable' )
構文
APEX_JAVASCRIPT.ADD_ATTRIBUTE (
p_name IN VARCHAR2,
p_value IN VARCHAR2,
p_omit_null IN BOOLEAN:=TRUE,
p_add_comma IN BOOLEAN:=TRUE)
RETURN VARCHAR2;
パラメータ
表13-2では、ADD_ATTRIBUTEファンクションのシグネチャ1で使用可能なパラメータについて説明します。
表13-2 ADD_ATTRIBUTEのシグネチャ1のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptオブジェクト属性の名前。 |
|
|
JavaScriptオブジェクト属性に割り当てられるテキスト。 |
|
|
TRUEを設定すると、 |
|
|
TRUEを設定すると、戻される値の後にカンマが追加されます。 |
例
addEmployee JavaScriptファンクションへのコールを追加し、様々な属性値を持つJavaScriptオブジェクトを渡します。このコールの出力は、次のようになります。
addEmployee(
{"FirstName":"John",
"LastName":"Doe",
"Salary":2531.29,
"Birthday":new Date(1970,1,15,0,0,0),
"isSalesman":true
});
最後の属性では、False(p_omit_null)とFALSE(p_add_comma)という組合せのパラメータを使用して、最後の属性が常に生成されるようにする必要があります。これによって、後続のカンマを追加する必要があるかどうかについて、他のパラメータを調べる必要がなくなります。
apex_javascript.add_onload_code (
'addEmployee('||
'{'||
apex_javascript.add_attribute('FirstName', sys.htf.escape_sc(l_first_name))||
apex_javascript.add_attribute('LastName', sys.htf.escape_sc(l_last_name))||
apex_javascript.add_attribute('Salary', l_salary)||
apex_javascript.add_attribute('Birthday', l_birthday)||
apex_javascript.add_attribute('isSalesman', l_is_salesman, false, false)||
'});' );
このファンクションは、属性とその属性の数値を戻します。
構文
APEX_JAVASCRIPT.ADD_ATTRIBUTE (
p_name IN VARCHAR2,
p_value IN NUMBER,
p_omit_null IN BOOLEAN:=TRUE,
p_add_comma IN BOOLEAN:=TRUE)
RETURN VARCHAR2;
パラメータ
表13-3では、ADD_ATTRIBUTEファンクションのシグネチャ2で使用可能なパラメータについて説明します。
表13-3 ADD_ATTRIBUTEのシグネチャ2のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptオブジェクト属性の名前。 |
|
|
JavaScriptオブジェクト属性に割り当てられる数値。 |
|
|
TRUEを設定すると、 |
|
|
TRUEを設定すると、戻される値の後にカンマが追加されます。 |
例
「ADD_ATTRIBUTEファンクションのシグネチャ1」の例を参照してください。
このファンクションは、属性、およびJavaScriptのブール値のtrue、falseまたはnullを戻します。
構文
APEX_JAVASCRIPT.ADD_ATTRIBUTE (
p_name IN VARCHAR2,
p_value IN BOLLEAN,
p_omit_null IN BOOLEAN:=TRUE,
p_add_comma IN BOOLEAN:=TRUE)
RETURN VARCHAR2;
パラメータ
表13-4では、ADD_ATTRIBUTEファンクションのシグネチャ3で使用可能なパラメータについて説明します。
表13-4 ADD_ATTRIBUTEのシグネチャ3のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptオブジェクト属性の名前。 |
|
|
JavaScriptオブジェクト属性に割り当てられるブール値。 |
|
|
|
|
|
TRUEを設定すると、戻される値の後にカンマが追加されます。 |
例
「ADD_ATTRIBUTEファンクションのシグネチャ1」の例を参照してください。
このファンクションは、属性と、その属性の日付を戻します。p_valueがnullの場合は、値nullが戻されます。
構文
APEX_JAVASCRIPT.ADD_ATTRIBUTE (
p_name IN VARCHAR2,
p_value IN DATE,
p_omit_null IN BOOLEAN:=TRUE,
p_add_comma IN BOOLEAN:=TRUE)
RETURN VARCHAR2;
パラメータ
表13-5では、ADD_ATTRIBUTEファンクションのシグネチャ4で使用可能なパラメータについて説明します。
表13-5 ADD_ATTRIBUTEのシグネチャ4のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptオブジェクト属性の名前。 |
|
|
JavaScriptオブジェクト属性に割り当てられる日付。 |
|
|
|
|
|
TRUEを設定すると、戻される値の後にカンマが追加されます。 |
例
「ADD_ATTRIBUTEファンクションのシグネチャ1」の例を参照してください。
このプロシージャは、インラインで含められるコード・スニペットをHTML出力に追加します。たとえば、新しいファンクションまたはグローバル変数宣言を追加する場合にこのプロシージャを使用できます。コードを実行する場合は、ADD_ONLOAD_CODEプロシージャを使用する必要があります。
構文
APEX_JAVASCRIPT.ADD_INLINE_CODE (
p_code IN VARCHAR2,
p_key IN VARCHAR2 DEFAULT NULL);
パラメータ
表13-6では、ADD_INLINE_CODEプロシージャで使用可能なパラメータについて説明します。
表13-6 ADD_INLINE_CODEのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptコード・スニペット。「 |
|
|
コード・スニペットの識別子。識別子を指定した場合、同じ名前のコード・スニペットがすでに追加されていると、新しいコード・スニペットは無視されます。 |
例
次の例では、JavaScriptファンクションinitMySuperWidgetをHTML出力に含めます。このプラグインがページで複数回使用され、add_inline_codeが複数回コールされた場合でも、すべてのコールがp_keyに対して同じ値を持つため、HTML出力に1回しか追加されません。
apex_javascript.add_inline_code (
p_code => 'function initMySuperWidget(){'||chr(10)||
' // do something'||chr(10)||
'};',
p_key => 'my_super_widget_function' );
このプロシージャは、JavaScriptライブラリをロードするためのスクリプト・タグを追加します。ライブラリが追加されている場合、2回目は追加されません。
構文
APEX_JAVASCRIPT.ADD_LIBRARY (
p_name IN VARCHAR2,
p_directory IN VARCHAR2,
p_version IN VARCHAR2 DEFAULT NULL,
p_check_to_add_minified IN BOOLEAN DEFAULT FALSE,
p_skip_extension IN BOOLEAN DEFAULT FALSE,
p_ie_condition IN VARCHAR2 DEFAULT NULL,
p_key IN VARCHAR2 DEFAULT NULL);
パラメータ
表13-7では、ADD_LIBRARYプロシージャで使用可能なパラメータについて説明します。
表13-7 ADD_LIBRARYのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptファイルの名前。指定時に |
|
|
JavaScriptライブラリをロードするディレクトリ。末尾のスラッシュを付ける必要があります。 |
|
|
バージョン識別子。 |
|
|
TRUEの場合、プロシージャは |
|
|
TRUEの場合、拡張子 |
|
|
Internet Explorerの条件として使用される条件。 |
|
|
ライブラリがすでにロードされているかどうかを示すために使用する名前。指定しなければ、 |
例
次の例には、p_plugin.file_prefixで指定したディレクトリのJavaScriptライブラリ・ファイルmy_library.1.2.min.js(アプリケーションがDEBUGモードで実行されていない場合)またはmy_library.1.2.js(アプリケーションがDEBUGモードで実行されている場合)が含まれます。p_check_to_add_minifiedがTRUEに設定されているため、アプリケーションがDEBUGモードで実行されていない場合に、.min拡張子の追加が行われます。p_skip_extensionが指定されていないため、これを.jsにデフォルト設定します。また、p_keyが指定されていないため、キーはp_plugin.file_prefix||mylibrary.1.2にデフォルト設定します。
apex_javascript.add_library (
p_name => 'mylibrary.1.2',
p_directory => p_plugin.file_prefix,
p_check_to_add_minified => true );
このプロシージャは、onloadイベントによって実行されるHTML出力にjavascriptコード・スニペットを追加します。同じキーを持つエントリが存在する場合、それは無視されます。p_keyがNULLの場合、スニペットは常に追加されます。
構文
APEX_JAVASCRIPT.ADD_ONLOAD_CODE (
p_code IN VARCHAR2,
p_key IN VARCHAR2 DEFAULT NULL);
パラメータ
表13-8では、ADD_ONLOAD_CODEプロシージャで使用可能なパラメータについて説明します。
表13-8 ADD_ONLOAD_CODEのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
onloadイベントの間に実行されるJavaScriptコード・スニペット。 |
|
|
指定されたコード・スニペットを識別する任意の名前。名前を指定した場合、同じ |
例
JavaScriptコールinitMySuperWidget()をonloadバッファに追加します。このプラグインがページで複数回使用され、add_onload_codeが複数回コールされた場合でも、すべてのコールがp_keyに対して同じ値を持つため、HTML出力に1回しか追加されません。
apex_javascript.add_onload_code (
p_code => 'initMySuperWidget();'
p_key => 'my_super_widget' );
このファンクションは、二重引用符で囲まれたエスケープされたテキストを戻します。たとえば、"That\'s a test"のような文字列が戻されます。
|
注意: このファンクションは、HTMLタグはエスケープしません。HTMLタグがJavaScriptオブジェクトの属性の割当てに悪影響を与えないようにするだけです。XSS(クロスサイト・スクリプティング)攻撃を防ぐには、SYS.HTF.ESCAPE_SCをコールして、HTMLページに文字列を差し込む際に、埋め込まれたJavaScriptコードが実行されるのを防ぐ必要もあります。 |
構文
APEX_JAVASCRIPT.ADD_VALUE (
p_value IN VARCHAR2,
p_add_comma IN BOOLEAN :=TRUE)
RETURN VARCHAR2;
パラメータ
表13-9では、ADD_VALUEファンクションのシグネチャ1で使用可能なパラメータについて説明します。
表13-9 ADD_VALUEのシグネチャ1のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
エスケープされ、二重引用符で囲まれるテキスト。 |
|
|
|
例
次の例では、onloadバッファにいくつかのJavaScriptコードを追加します。p_item.attribute_01の値を、まず、XSS攻撃を防ぐためにhtf.escape_scでエスケープし、apex_javascript.add_valueをコールしてJavaScript変数lTestに割り当てます。Add_valueは、値を適切にエスケープし、二重引用符で囲みます。カンマは不要なため、p_add_commaはFALSEに設定します。
apex_javascript.add_onload_code (
'var lTest = '||apex_javascript.add_value(sys.htf.escape_sc(p_item.attribute_01), FALSE)||';'||chr(10)||
'showMessage(lTest);' );
このファンクションは、p_valueをJavaScriptの数値として戻します。p_valueがNULLの場合は、値nullが戻されます。
構文
APEX_JAVASCRIPT.ADD_VALUE (
p_value IN NUMBER,
p_add_comma IN BOOLEAN :=TRUE)
RETURN VARCHAR2;
パラメータ
表13-9では、ADD_VALUEファンクションのシグネチャ2で使用可能なパラメータについて説明します。
表13-10 ADD_VALUEのシグネチャ2のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptの数値として戻される数値。 |
|
|
|
例
「ADD_VALUEファンクションのシグネチャ1」の例を参照してください。
このファンクションは、p_valueをJavaScriptのブール値として戻します。p_valueがNULLの場合は、値nullが戻されます。
構文
APEX_JAVASCRIPT.ADD_VALUE (
p_value IN BOOLEAN,
p_add_comma IN BOOLEAN :=TRUE)
RETURN VARCHAR2;
パラメータ
表13-11では、ADD_VALUEファンクションのシグネチャ3で使用可能なパラメータについて説明します。
表13-11 ADD_VALUEのシグネチャ3のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptのブール値として戻されるブール値。 |
|
|
|
例
「ADD_VALUEファンクションのシグネチャ1」の例を参照してください。
このファンクションは、p_valueをJavaScriptの日付オブジェクトとして戻します。p_valueがNULLの場合は、値nullが戻されます。
構文
APEX_JAVASCRIPT.ADD_VALUE (
p_value IN NUMBER,
p_add_comma IN BOOLEAN :=TRUE)
RETURN VARCHAR2;
パラメータ
表13-12では、ADD_VALUEファンクションのシグネチャ4で使用可能なパラメータについて説明します。
表13-12 ADD_VALUEのシグネチャ4のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
JavaScriptの日付オブジェクトとして戻される日付。 |
|
|
|
例
「ADD_VALUEファンクションのシグネチャ1」の例を参照してください。
このファンクションはJavaScriptで使用されるテキストをエスケープします。このファンクションは次の置換を行います。
|
注意: このファンクションは、HTMLタグがJavaScriptオブジェクトの属性の割当てに悪影響を与えないようにするとともに、HTMLタグ「<」および「>」をエスケープします。その他のHTMLタグはエスケープされないため、XSS(クロスサイト・スクリプティング)攻撃を確実に防ぐには、SYS.HTF.ESCAPE_SCをコールして、HTMLページに文字列を差し込む際に、埋め込まれたJavaScriptコードが実行されるのを防ぐ必要もあります。 |
構文
APEX_JAVASCRIPT.ESCAPE (
p_text IN VARCHAR2)
RETURN VARCHAR2;
パラメータ
表13-14では、ESCAPEファンクションで使用可能なパラメータについて説明します。
例
onloadバッファにいくつかのJavaScriptコードを追加します。p_item.attribute_01の値は、まず、XSS攻撃を防ぐためにhtf.escape_scでエスケープし、引用符などの特殊文字がJavaScriptコードに悪影響を与えないようにapex_javascript.escapeでエスケープします。
apex_javascript.add_onload_code (
'var lTest = "'||apex_javascript.escape(sys.htf.escape_sc(p_item.attribute_01))||'";'||chr(10)||
'showMessage(lTest);' );