チュートリアル/プローブファンクションの利用

「チュートリアル/プログラムコールの利用」で作成したページを前提に解説します。

プローブファンクションとは

プローブファンクションは、ページテンプレート上に明示的にプログラムコールを書かずにプログラムの実行を割り込ませることができる仕組みです。

これを利用すると、既存のページテンプレートにほとんど変更を加えることなく出力に対して操作を加えることができます。

プローブ設定を書く

プローブファンクションを設定するために、まずプローブ設定ファイルを記述します。既にデモプログラムではfunctions.xmlを設定していますので、これに追加で処理を割り当てていきます。

たとえば、p100/test.htmlの背景色をグレーにすることを考えてみます。これを行うには、ページテンプレート上でBODYタグにstyle="background-color:gray"を指定すれば良いでしょう。そのように書くと確かに背景がグレーになります。確認できたら元に戻します。

これと同じことをプローブファンクションで行うには、functions.xmlに以下のように変更を加えます。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root SYSTEM "http://127.0.0.1/dummy">
<root>
    <addfunc use="true" pattern="p006/test.html">
        <function use="true" point="post_pre_element" language="java" source="LocalCode.java" pattern="**/body"/>
        <function use="true" point="pre_element" language="java" source="LocalCode.java#initCellCount" pattern="**/table"/>
        <function use="true" point="pre_element" language="java" source="LocalCode.java#cellCount" pattern="**/td"/>
        <function use="true" point="post_element" language="java" source="LocalCode.java#doneCellCount" pattern="**/table"/>
        <function use="true" point="pre_text" language="java" source="LocalCode.java#decoText" pattern="**/td"/>
    </addfunc>
    <addfunc use="true" pattern="p100/test.html">
        <function use="true" point="pre_element" language="java" source="/GrayBack.java" pattern="/html/body"/>
    </addfunc>

</root>
    

これは、p100/test.htmlのhtml/bodyの位置に対してGrayBack.javaを呼び出すという設定です。これを保存し、ページをリロードするとまずはエラーになります。GrayBack.javaがないというメッセージが出ています。

動きを調整する

GrayBack.javaを以下の内容で、funcフォルダの直下に置きます。

import java.util.Map;
import quickreflector.silvergear.scriptdriver.java.JavaFunctionMarker;
import quickreflector.webcore.MetaObjectLoader;
public class GrayBack implements JavaFunctionMarker {
    public void invoke( Map context, Map meta ) throws Exception {
        Map attr = new MetaObjectLoader( meta ).getAttributes();
        attr.put( "style", "background-color:gray" );
        System.out.println( "GrayBack" );
    }
}
    
funcにGrayBack.javaを配置

ページをリロードすると、背景がグレーになります。

functions.xmlのpattern="p100/test.html"をpattern="**"とすると、すべてのデモページの背景がグレーになります。