前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.2
SFZWebBrowserControl
簡易ウェブブラウザコントロールです。
#include <SFZWebBrowserControl.hpp>
class SFZWebBrowserControl : public SFYControl;
SFMTYPEDEFRESPONDER(SFZWebBrowserControl)

継承図

SFZWebBrowserControl クラスの継承図

協調図

SFZWebBrowserControl クラスの協調図

解説

■ 仕様と使い方

SFZWebBrowserControl クラスは、以下の機能を備える簡易ウェブブラウザコントロールです。

  • HTTP 通信
  • HTML レンダリング
  • インライン画像表示
  • ハイパーリンク
  • アクセス履歴

SFZWebBrowserControl クラスは、 BREW API IHtmlViewer を使用して実装されています。 そのため、HTML レンダリングに関する機能は BREW API IHtmlViewer と同等です。

簡易ウェブブラウザコントロールの枠線の色や表示に関するデザインを変更したい場合は、 SFZWebBrowserControl::HandleRenderRequest 関数をオーバーライドします。

コントロール値の役割について

SFZWebBrowserControl クラスにおける SFYControl の現在値、最大値、最小値の役割は以下の通りです。

現在値は、現在表示されているページの履歴番号を表します。 SFZWebBrowserControl::GetCurrentHistoryIndex 関数の戻り値は、 現在値を参照しています。

最大値は、履歴リストのエントリ数(履歴のサイズ)を表します。 SFZWebBrowserControl::GetHistorySize 関数の戻り値は、 最大値を参照しています。

最小値は、常に 0 です(最小値は使用されません)。

[Caution] コントロール値の変更について

上記にあるように、 現在値、最大値、最小値は SFZWebBrowserControl クラスの内部で制御されていますので、 SFYControl::SetCurrentValue / SFYControl::SetMaximumValue / SFYControl::SetMinimumValue 関数を使用して現在値、最大値、最小値を変更してはいけません。

[Tip] Tip

HTTP リクエストヘッダー、タイムアウトなどの設定を行うには、 SFZWebBrowserControl::SetWeb 関数を使用します。

タイムアウトなどのエラー処理は、 SFZWebBrowserControl クラスを継承するクラスを作成し、 SFZWebBrowserControl::ResponseNotifyHandler または SFZWebBrowserControl::DoneNotifyHandler 関数をオーバーライドして処理を記述します。

タイマーでタイムアウトの処理を行う方法については、 こちらのサンプルアプリ(websample.zip)を参照してください。

[Note] エラー値

SFZWebBrowserControl::SFZWebBrowserControl コンストラクタでエラーが発生すると、 エラー値は内部(SFZWebBrowserControl インスタンス)に記録されます。

このエラー値は、 static_catch 関数を使用して取得します。

エラーが発生しなかった場合は、SFERR_NO_ERROR が返却されます。

[Caution] mif ファイルの特権設定

SFZWebBrowserControl クラスを利用するには、 mif ファイルの特権レベル設定で「Web アクセス」の項目をオンにする必要があります。

■ サンプルコード

以下は、 簡易ブラウザ(SFZWebBrowserControl クラス)を利用してウィンドウ内に HTML 文書を表示するコードです。

SFMTYPEDEFRESPONDER(MyWindow)
class MyWindow : public SFZWindow{
    SFMSEALRESPONDER(MyWindow)
    SFMRESPONDERINSTANTIATEFOUR(MyWindow, SFZWindow, SFYContainer, SFYWidget, SFYResponder)
public:
    // MyWindow のタイプ
    enum CodeEnum {
        CODE_TYPE = four_char_code('M', 'W', 'N', 'D')
    };
    SFMTYPEDEFTYPE(CodeEnum)
public:
    static MyWindowSmp NewInstance(SFCErrorPtr exception = null);
    // MyWindow 内のレスポンダ(簡易ウェブブラウザ)を作成する関数
    SFCError Make(Void); 

protected:
    explicit MyWindow(Void) static_throws;
    virtual ~MyWindow(Void);

    // 簡易ウェブブラウザ
    SFZWebBrowserControlSmp _browser;

};

// コンストラクタ
MyWindow::MyWindow(Void) static_throws
{
    if (static_try()) {
        // レスポンダのタイプを設定する
        SetType(CODE_TYPE);
   }
}

// デストラクタ
MyWindow::~MyWindow(Void)
{
}

// MyWindow 内のレスポンダ(簡易ウェブブラウザ)を作成する関数
SFCError MyWindow::Make(Void)
{
    SFCError error;

    // 簡易ブラウザに表示する HTML 文書
    SFXAnsiString buffer(
         "BrowserControl<br /><br />"
         "<a href=\"http://www.s-cradle.com/example/tabbrowser/\">ソフィアクレイドル</a><br /><br />"
    );

    // 簡易ウェブブラウザの作成
    if ((_browser = SFZWebBrowserControl::NewInstance(&error)) != null) {

        // 親レスポンダを MyWindow に設定する
        if ((error = _browser->SetParent(GetThis())) == SFERR_NO_ERROR) {

            // 実領域を MyWindow のローカル領域に設定する
            // ※ 以下の文を実行する前に、MyWindow のローカル領域を設定していないと、
            //    実領域は空の矩形領域となり何も表示されない
            _browser->SetRealBound(GetLocalBound());

            // 状態を「可視+活性+操作可能+フォーカス」にまとめて設定する
            _browser->SetState(true, true, true, true);

            // HTML 文書をレンダリングする
            _browser->Load(buffer);

            // 簡易ウェブブラウザを最前面に移動する
            // ※ MyWindow の子レスポンダは簡易ウェブブラウザだけなので省略可
            _browser->ToFront();
        }
    }
    return error;
}

図 468. 実行結果

実行結果

参照

SFYControl | SFBHTMLViewer | SFBWeb | BREW API IHtmlViewer | BREW API IWeb

メンバ

コンストラクタ/デストラクタ
SFZWebBrowserControl( Void )
SFZWebBrowserControl クラスのコンストラクタです。
~SFZWebBrowserControl( Void )
SFZWebBrowserControl クラスのデストラクタです。
パブリック関数
Void ClearHistory( Void )
履歴リストを空にします。
SInt32 FindElement( ACharConstPtr element , SInt32 no )
現在表示中のページから、指定された要素を検索します。
HistoryEntry GetCurrentHistory( Void )
現在表示しているページの履歴内容(URL とタイトル)を取得します。
UInt32 GetCurrentHistoryIndex( Void )
現在の履歴番号を取得します。
SFXAnsiString GetElementText( SInt32 elementIndex )
指定された要素の内容を取得します。
HistoryEntry GetHistory( UInt32 historyIndex = 0 )
指定された履歴番号の履歴内容を取得します。
HistoryEntryConstPtr GetHistoryList( Void )
履歴リストを取得します。
UInt32 GetHistorySize( Void )
履歴リストのエントリ数を取得します。
SInt32 GetIndent( Void )
HTML 表示のインデントの幅を取得します。[単位: ピクセル]
SFXRGBColor GetLinkColor( Void )
HTML 表示のリンクの文字の表示色を取得します。
SInt32 GetParagraphSpacing( Void )
HTML 表示の段落間の行間の長さを取得します。[単位: ピクセル]
SInt32 GetScrollbarWidth( Void )
スクロールバーの幅を取得します。[単位: ピクセル]
SFXRGBColor GetTextColor( Void )
テキストの表示色を取得します。
SFBWebSmpConstRef GetWeb( Void )
IWeb インターフェースを取得します。
Bool IsBusy( Void )
通信中またはレンダリング中であるかどうかを判定をします。
Bool IsInlineEditEnable( Void )
文字をインラインで入力する設定であるかどうかを判定します。
Bool IsScrollbarEnable( Void )
スクロールバーがあるかどうかを判定をします。
SFCError Load( SFXAnsiStringConstRef data )
指定された文字列を HTML 文書とみなして、レンダリングを開始します。
SFCError Load( SFXAnsiStringConstRef data , SFXAnsiStringConstRef url )
指定された文字列を HTML 文書とみなして、レンダリングを開始します。
SFCError Move( UInt32 historyIndex = 0 )
指定された履歴番号のページへ移動し、ページの再取得と再レンダリングを行います。
SFCError Navigate( SFXAnsiStringConstRef url )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Navigate( SFXAnsiStringConstRef url , SFXAnsiStringConstRef method )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Navigate( SFXAnsiStringConstRef url , SFXAnsiStringConstRef method , SFXAnsiStringConstRef data )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Navigate( SFXAnsiStringConstRef url , SFXAnsiStringConstRef method , SFXBufferConstRef data )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Navigate( SFBSourceSmpConstRef source )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Navigate( SFBSourceSmpConstRef source , SFXAnsiStringConstRef basdUrl )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Navigate( SFBAStreamSmpConstRef stream )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Navigate( SFBAStreamSmpConstRef src , SFXAnsiStringConstRef baseUrl )
指定された URL のページを取得して、レンダリングを開始します。
SFCError Next( SInt32 n = 1 )
指定された値だけ履歴を進み、ページを再取得しレンダリングします。
SFCError Previous( SInt32 n = 1 )
指定された値だけ履歴を戻り、ページを再取得しレンダリングします。
Void Reload( Void )
現在表示しているページを再取得して再描画します。
SFCError SetAuthorizeData( SFXAnsiStringConstRef user , SFXAnsiStringConstRef passwd , SFXAnsiStringConstRef url )
HTTP ベーシック認証の情報を設定します。
SFCError SetHistorySize( UInt32 size )
履歴リストのサイズを設定します。
SFCError SetIndent( SInt32 pixel )
インデントの幅を設定します。[単位: ピクセル]
Void SetInlineEditEnable( Bool enable )
フォームでの文字入力をインラインするかを設定します。
SFCError SetLinkColor( SFXRGBColorConstRef color )
リンク文字列の表示色を設定します。
SFCError SetParagraphSpacing( SInt32 pixel )
段落間の行間の長さを設定します。[単位: ピクセル]
Void SetScrollbarEnable( Bool enable )
スクロールバーの有無を設定します。
SFCError SetScrollbarWidth( SInt32 pixel )
スクロールバーの幅を設定します。[単位: ピクセル]
SFCError SetTextColor( SFXRGBColorConstRef color )
テキストの表示色を設定します。
Void SetWeb( SFBWebSmpConstRef web )
HTTP 通信でサーバーにアクセスするときに使用される IWeb インターフェースを設定します。
Void Stop( Void )
通信やレンダリングを行っている場合、その処理を中断します。
SFCError UnsetAuthorizeData( Void )
HTTP ベーシック認証の設定を解除します。
Void UnsetWeb( Void )
SetWeb 関数による IWeb インターフェースの設定を解除します。
Void ClearHandler( Void ) (SFYResponder から継承)
このレスポンダのハンドラの登録をすべて解除します。
Void ClearTracer( Void ) (SFYResponder から継承)
このレスポンダのトレーサの配信規則の登録をすべて解除します。
SFCError Distribute( SFXEventConstRef event , BoolPtr result = null ) (SFYResponder から継承)
指定された配信型イベントを SFYDistributer インスタンスと、このレスポンダ以下のレスポンダツリーに配信します。
SFXRGBColorConstRef GetBackgroundColor( Void ) (SFYWidget から継承)
背景の色を取得します。
SFYResponderSmp GetChildBack( Void ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( UInt32 id ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SInt32 GetChildCount( Void ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( UInt32 id ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SFYResponderSmp GetChildForward( SInt32 index ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( Void ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( UInt32 id ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SInt32 GetCurrentValue( Void ) (SFYControl から継承)
コントロールの現在値を取得します。
SFYDistributerPtr GetDistributer( Void ) (SFYResponder から継承)
このレスポンダに設定されている配信エンジンを取得します。
SFYResponderSmp GetFrame( Void ) (SFYResponder から継承)
このレスポンダに装着されたフレームを取得します。
SFXRectangle GetGlobalBound( Void ) (SFYResponder から継承)
このレスポンダのグローバル領域を取得します。
UInt32 GetID( Void ) (SFYResponder から継承)
このレスポンダの ID を取得します。
SFXRectangle GetLocalBound( Void ) (SFYResponder から継承)
このレスポンダのローカル領域を取得します。
SInt32 GetMaximumValue( Void ) (SFYControl から継承)
コントロールの最大値を取得します。
SInt32 GetMinimumValue( Void ) (SFYControl から継承)
コントロールの最小値を取得します。
SInt32 GetNthBackward( Void ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( UInt32 id ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( Void ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( UInt32 id ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SFYResponderSmp GetParent( Void ) (SFYResponder から継承)
このレスポンダの親レスポンダを取得します。
Bool GetPropertyTransparent( Void ) (SFYResponder から継承)
このレスポンダの透過属性を取得します。
SFXRectangleConstRef GetRealBound( Void ) (SFYResponder から継承)
このレスポンダの実領域を取得します。
VoidPtr GetReference( Void ) (SFYResponder から継承)
このレスポンダのリファレンス値を取得します。
SFYRendererPtr GetRenderer( Void ) (SFYResponder から継承)
このレスポンダに設定されている描画エンジンを取得します。
SFYResponderSmp GetRoot( Void ) (SFYResponder から継承)
このレスポンダが所属するレスポンダツリーのルートレスポンダを取得します。
Bool GetStateActive( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの活性状態を取得します。
Bool GetStateEnable( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの操作可能状態を取得します。
Bool GetStateFocus( Bool inherit = false ) (SFYResponder から継承)
このレスポンダのフォーカス状態を取得します。
Bool GetStateValid( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの有効状態を取得します。
Bool GetStateVisible( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの可視状態を取得します。
SFXRectangle GetSuitableBound( Void ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXRectangle GetSuitableBound( SFXRectangleConstRef rectangle ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXRectangle GetSuitableBound( SFXRectangleConstRef param , HorizontalEnum horizontal , VerticalEnum vertical ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXMargin GetSuitableMargin( Void ) (SFYResponder から継承)
このレスポンダのフレーム余白領域を取得します。
SFCType GetType( Void ) (SFYResponder から継承)
このレスポンダのタイプを取得します。
SFXRectangleConstRef GetVirtualBound( Void ) (SFYResponder から継承)
このレスポンダの仮想領域を取得します。
Bool HasFrame( Void ) (SFYResponder から継承)
このレスポンダがコンテントレスポンダであるかどうかを判定します。
Void Initialize( Void ) (SFYResponder から継承)
このレスポンダを初期化します。
Void Invalidate( Void ) (SFYResponder から継承)
指定された領域を再描画領域に登録します。
Void Invalidate( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域を再描画領域に登録します。
Void InvokeBackward( SFXEventConstRef event , Bool overload , BoolPtr result = null ) (SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録順に起動されます)。
Void InvokeForward( SFXEventConstRef event , Bool overload , BoolPtr result = null ) (SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録の逆順に起動されます)。
Bool IsBack( Void ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( UInt32 id ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsFrame( Void ) (SFYResponder から継承)
このレスポンダがアタッチメントフレームであるかどうかを判定します。
Bool IsFront( Void ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( UInt32 id ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsRoot( Void ) (SFYResponder から継承)
このレスポンダがルートレスポンダかどうかを判定します。
SFCError RegisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterTracer( SFXEventRangeConstRef range , SFYTracer::RuleRecConstRef rule ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstRef range , SFYTracer::OrderEnum order , SFYTracer::StateEnum state , Bool overload ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::OrderEnumConstPtr order , SFYTracer::StateEnumConstPtr state , BoolConstPtr overload , SInt32 length ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError Render( Bool force = false ) (SFYResponder から継承)
このレスポンダ以下のレスポンダツリーを再描画します。
Void SetBackgroundColor( SFXRGBColorConstRef param ) (SFYWidget から継承)
背景の色を設定します。
Void SetCurrentValue( SInt32 param ) (SFYControl から継承)
コントロールの現在値を設定します。
Void SetDistributer( SFYDistributerPtr param ) (SFYResponder から継承)
指定された配信エンジンをこのレスポンダに設定します。
SFCError SetFrame( SFYResponderSmpConstRef param ) (SFYResponder から継承)
このレスポンダにフレームを装着します。
Void SetID( UInt32 param ) (SFYResponder から継承)
指定された ID をこのレスポンダに設定します。
Void SetMaximumValue( SInt32 param ) (SFYControl から継承)
コントロールの最大値を設定します。
Void SetMinimumValue( SInt32 param ) (SFYControl から継承)
コントロールの最小値を設定します。
SFCError SetParent( SFYResponderSmpConstRef param ) (SFYResponder から継承)
指定されたレスポンダをこのレスポンダの親レスポンダに設定します。
Void SetProperty( Bool transparent ) (SFYResponder から継承)
指定された属性をこのレスポンダに設定します。
Void SetPropertyTransparent( Bool param ) (SFYResponder から継承)
指定された透過属性をこのレスポンダに設定します。
Void SetRealBound( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域をこのレスポンダの実領域に設定します。
Void SetReference( VoidPtr param ) (SFYResponder から継承)
指定された値をこのレスポンダのリファレンスに設定します。
Void SetRenderer( SFYRendererPtr param ) (SFYResponder から継承)
指定された描画エンジンをこのレスポンダに設定します。
Void SetState( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグに設定します。
Void SetStateActive( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの活性状態フラグに設定します。
Void SetStateEnable( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの操作可能状態フラグに設定します。
Void SetStateFocus( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダのフォーカス状態フラグに設定します。
Void SetStateVisible( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの可視状態フラグに設定します。
Void SetVirtualBound( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域をこのレスポンダの仮想領域に設定します。
Void Terminate( Void ) (SFYResponder から継承)
このレスポンダの終了処理を行います。
Void ToBack( Void ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最背面に移動します。
Void ToBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最背面に移動します。
Void ToBack( UInt32 id ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最背面に移動します。
Void ToBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最背面に移動します。
Void ToFront( Void ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最前面に移動します。
Void ToFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最前面に移動します。
Void ToFront( UInt32 id ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最前面に移動します。
Void ToFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを姉妹レスポンダのなかで最前面に移動します。
Void ToNthBackward( SInt32 index ) (SFYResponder から継承)
このレスポンダを背面から数えて指定された順番に移動します。
Void ToNthBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを背面から数えて指定された順番に移動します。
Void ToNthBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダを背面から数えて指定された順番に移動します。
Void ToNthBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを背面から数えて指定された順番に移動します。
Void ToNthForward( SInt32 index ) (SFYResponder から継承)
このレスポンダを前面から数えて指定された順番に移動します。
Void ToNthForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを前面から数えて指定された順番に移動します。
Void ToNthForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダを前面から数えて指定された順番に移動します。
Void ToNthForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを前面から数えて指定された順番に移動します。
Void UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterTracer( SFXEventRangeConstRef range ) (SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
Void UnregisterTracer( SFXEventRangeConstPtr range , SInt32 length ) (SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
プロテクト関数
Void DoneNotifyHandler( DoneNotifyConstRef notify )
[ハンドラ] レンダリングが終了したときに呼び出されるハンドラです。
Void FocusNotifyHandler( FocusNotifyConstRef notify )
[ハンドラ] カーソルが移動したときに呼び出されるハンドラです。
Void HandleBoundGlobal( SFXRectangleConstRef rectangle )
[非推奨(廃止予定 API)] グローバル領域が変化したときに呼び出される関数です。
Void HandleRenderRequest( SFXGraphicsPtr graphics )
描画イベントを受信したときに呼び出される関数です(レスポンダを描画します)。
Void JumpNotifyHandler( JumpNotifyConstRef notify )
[ハンドラ] リンクが押されたときに呼び出されるハンドラです。
Bool ResponseNotifyHandler( ResponseNotifyConstRef notify )
[ハンドラ] サーバーへの接続が完了し、レンダリングが始まる前に呼び出されるハンドラです。
static
SFYResponderSmp
Factory( SFYResponderPtr responder , SFCErrorPtr exception = null ) (SFYResponder から継承)
NewInstance 関数の実装を補助します。
SFYResponderSmp GetThis( Void ) (SFYResponder から継承)
このレスポンダのスマートポインタを取得します。
Void HandleBoundOptimize( SFXRectanglePtr rectangle ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベントを受信したときに呼び出される関数です(指定した矩形に収まる範囲内で最適な領域を計算します)。
Void HandleBoundReal( Void ) (SFYControl から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL) イベントを受信したときに呼び出される関数です (実領域が変化したときの処理を行います)。
Void HandleBoundRequest( SFXRectanglePtr rectangle ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベントを受信したときに呼び出される関数です(最適な領域を計算します)。
Void HandleBoundVirtual( Void ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL) イベントを受信したときに呼び出される関数です (仮想領域が変化したときの処理を行います)。
Void SetType( SFCType param ) (SFYResponder から継承)
指定された値をこのレスポンダのタイプに設定します。
CodeEnum
SFZWebBrowserControl クラスを表す定数です。
DEFAULT
パラメータの初期値に関する列挙型です。
DoneNotify
レンダリング終了時の情報を保持するクラスです。
FocusNotify
ブラウザのフォーカス移動情報を保持するクラスです。
HistoryEntry
履歴内容を表す構造体です。
JumpNotify
ブラウザで押されたリンクの情報を保持するためのクラスです。
ResponseNotify
サーバーへの接続が完了し、レンダリングが始まる前の情報を保持するクラスです。
HorizontalEnum (SFYResponder から継承)
水平方向のアライメントを表す定数です。
VerticalEnum (SFYResponder から継承)
垂直方向のアライメントを表す定数です。

SFZWebBrowserControl::SFZWebBrowserControl
SFZWebBrowserControl クラスのコンストラクタです。
[ protected, explicit ]
SFZTabControl(Void);

解説

このコンストラクタは、SFZWebBrowserControl インスタンスの初期化処理を行います。 詳細は、内部実装のコードを参照してください。

内部実装

このコンストラクタの内部実装は以下の通りです。

/*protected */SFZWebBrowserControl::SFZWebBrowserControl(Void) static_throws
{
    SFXRectangle                        rect;
    SFCError                            error(SFERR_NO_ERROR);

    if (static_try()) {
        SetType(CODE_TYPE);
        static_throw(MakeHandler());
        if (static_try()) {
            _webCode = 0;
            _optBodyMem = null;
            _history = null;
            _stateHistory = null;
            _fullscreen_edit = false;
            _fepin = false;
            SetMaximumValue(DEFAULT_HISTORY_SIZE);
            if ((_viewer = SFBHTMLViewer::NewInstance(&error)) != null) {
                if ((_stateHistory = ::new SFXAnsiString[GetHistorySize()]) != null) {
                    if ((_history = ::new HistoryEntry[GetHistorySize()]) != null) {
                        RenderSafe();
                        _viewer->SetRect(SFXRectangle::EmptyInstance());
                        _viewer->SetProperties(HVP_LOADALLIMAGES | HVP_INVALIDATION | _viewer->GetProperties());
                        _viewer->SetNotifyFn(NotifyHandler, this);
                    }
                    else {
                        static_throw(SFERR_NO_MEMORY);
                    }
                }
                else {
                    static_throw(SFERR_NO_MEMORY);
                }
            }
            else {
                static_throw(SFERR_FAILED);
            }
        }
    }
}// SFZWebBrowserControl::SFZWebBrowserControl //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

/*private */SFCError SFZWebBrowserControl::MakeHandler(Void)
{
    static SFXEventRange::AtomRecConst  range[] = {
        {   SFEVT_BEGIN,            SFEVT_END,              SFP16_BEGIN,            SFP16_END           },
        {   SFEVT_CTL_TAB,          SFEVT_CTL_TAB,          SFP16_BEGIN,            SFP16_END           },
        {   SFEVT_APP_RESUME,       SFEVT_APP_RESUME,       SFP16_BEGIN,            SFP16_END           },
        {   SFEVT_APP_SUSPEND,      SFEVT_APP_SUSPEND,      SFP16_BEGIN,            SFP16_END           },
        {   SFEVT_RESPONDER_STATE,  SFEVT_RESPONDER_STATE,  SFP16_STATE_FOCUS,      SFP16_STATE_FOCUS   },
    };
    SFYHandler::RuleRec                 rule[lengthof(range)];
    SFCError                            error(SFERR_NO_ERROR);

    rule[0].spp = XANDLER_FUNCTION(NativeHandler);
    rule[0].reference = this;
    rule[1].spp = XANDLER_FUNCTION(CtlTabHandler);
    rule[1].reference = this;
    rule[2].spp = XANDLER_FUNCTION(ResumeHandler);
    rule[2].reference = this;
    rule[3].spp = XANDLER_FUNCTION(SuspendHandler);
    rule[3].reference = this;
    rule[4].spp = XANDLER_FUNCTION(OnState);
    rule[4].reference = this;
    error = RegisterHandler(atomic_cast(range), rule, lengthof(range));
    return error;
}// SFZWebBrowserControl::MakeHandler //

/*protected */XANDLER_IMPLEMENT_BOOLEVENT(SFZWebBrowserControl, NativeHandler, invoker, event)
{
    Bool                                result(false);
    unused(invoker);

    if (!_fullscreen_edit) {
        RenderSafe();
    }
    if (_viewer != null && _viewer->IsActive()) {
        if (_viewer->HandleEvent(event)) {
            result = true;
        }
        else {
            #if defined TARGET_EXTENSION_KDDI
            #if TARGET_VERSION_GE(3, 1, 0)
            if (event.GetType() == SFEVT_CTL_TEXT_MODECHANGED) {
                switch (event.GetP16()) {
                    case TMJ_FEPIN://TMJ_FEPIN:
                        _fepin = true;
                        break;
                    case TMJ_FEPOUT://TMJ_FEPOUT:
                        _fepin = false;
                        break;
                    default:
                        break;
                }
            }
            #endif
            #endif
        }
    }
    return result;
}// XANDLER_IMPLEMENT_BOOLEVENT(SFZWebBrowserControl, NativeHandler, invoker, event) //

/*protected */XANDLER_IMPLEMENT_BOOLVOID(SFZWebBrowserControl, CtlTabHandler, invoker)
{
    unused(invoker);
    return false;
}// XANDLER_IMPLEMENT_BOOLVOID(SFZWebBrowserControl, CtlTabHandler, invoker)

/*protected */XANDLER_IMPLEMENT_VOIDSUSPEND(SFZWebBrowserControl, SuspendHandler, invoker, reason, info)
{
    unused(invoker); unused(reason); unused(info);
    RenderSafe();
    Stop();
    ClearWebRespAndOpts();
    _web.Release();
    _resumeProperty = _viewer->GetProperties();
    _viewer->Reset();
    return;
}// XANDLER_IMPLEMENT_VOIDSUSPEND //

/*private */Void SFZWebBrowserControl::ClearWebRespAndOpts(Void)
{
    _webResp.Release();
    _optMethod = SFXAnsiString::EmptyInstance();
    _optBody.Release();
    if (_optBodyMem != null) {
        MemoryFree(_optBodyMem);
    }
    _optBodyMem = null;
    _optSsl.Release();
}

/*protected */XANDLER_IMPLEMENT_VOIDRESUME(SFZWebBrowserControl, ResumeHandler, invoker, environment)
{
    SFCError                            error(SFERR_NO_ERROR);

    unused(invoker); unused(environment);
    RenderSafe();
    if ((_viewer = SFBHTMLViewer::NewInstance(&error)) != null) {
        RenderSafe();
        AdjustViewer(GetGlobalBound());
        _viewer->SetProperties(_resumeProperty);
        _viewer->SetNotifyFn(NotifyHandler, this);
    }
    _viewer->SetActive(GetStateVisible() && GetStateActive() && GetStateEnable());
    _viewer->SetViewState(_stateHistory[GetCurrentHistoryIndex()]);
    Reload();
    return;
}// XANDLER_IMPLEMENT_VOIDRESUME //

/*private */Void SFZWebBrowserControl::AdjustViewer(SFXRectangleConstRef rectangle) const
{
    SFXRectangle                        grect(rectangle);

    grect.Deflate(VIEWER_MARGIN, VIEWER_MARGIN);
    _viewer->SetRect(grect);
}// SFZWebBrowserControl::AdjustViewer //

/*private */XANDLER_IMPLEMENT_VOIDSTATE(SFZWebBrowserControl, OnState, invoker, reason, state)
{
    Bool                                focus(GetStateFocus(true));
    unused(invoker);
    unused(reason);
    unused(state);

    if (focus != _viewer->IsActive()) {
        _viewer->SetActive(focus);
    }
    return;
}// XANDLER_IMPLEMENT_VOIDSTATE(SFZWebBrowserControl, OnState, invoker, reason, state)

/*private static */Void SFZWebBrowserControl::NotifyHandler(VoidPtr p, HViewNotify* n)
{
    SFZWebBrowserControlPtr             self(reinterpret_cast<SFZWebBrowserControlPtr>(p));
    Notify*                             notify = static_cast<Notify*>(n);
    SFBShellSmp                         shell;
    SFXAnsiString                       state;
    SInt32                              elementNo;
    SFYResponderSmp                     root;

    switch (notify->GetType()) {
    case HVN_DONE:
        if (notify->u.nDone == SFERR_NO_ERROR) {
            if ((state = self->_stateHistory[self->GetCurrentHistoryIndex()]) != SFXAnsiString::EmptyInstance()) {
                self->_viewer->SetViewState(state);
            }
            elementNo = self->FindElement("title", 0);
            self->_history[self->GetCurrentHistoryIndex()].title = elementNo < 0 ? SFXAnsiString::EmptyInstance() : self->GetElementText(elementNo);
        }
        if (notify->u.nDone > SFERR_NO_ERROR) {
            self->_viewer->GetOption(HVOPT_N_ERROR, (HVOpt*)(&notify->u.nDone));
            notify->u.nDone = -notify->u.nDone;  // error code change to negative
        }
        else {
            notify->u.nDone = self->_webCode;
        }
        self->DoneNotifyHandler(*(static_cast<DoneNotify*>(notify)));
        break;
    case HVN_JUMP:
    case HVN_SUBMIT:
        self->JumpNotifyHandler(*(static_cast<JumpNotify*>(notify)));
        break;
    case HVN_FOCUS:
        self->FocusNotifyHandler(*(static_cast<FocusNotify*>(notify)));
        break;
    case HVN_FULLSCREEN_EDIT:   // htmlviewer edit field going into fullscreen mode
        self->_fullscreen_edit = true;
        self->Invalidate();
        break;
    case HVN_REDRAW_SCREEN:     // htmlviewer drew outside of bounding rectangle, applet must redraw it's screen
        self->_fullscreen_edit = false;
        if ((root = self->GetRoot()) != null) {
            root->Render(true);
        }
        break;
    case HVN_INVALIDATE:        // htmlviewer needs redraw
        if (self->_fepin == false && self->GetStateFocus(true)) {
            self->Invalidate();
        }
        else {
            self->_viewer->Redraw();
        }
        break;
    #if TARGET_VERSION_GE(3, 1, 0)
    case HVN_PAGEDONE:
        break;
    case HVN_CONTENTDONE:
        self->Render();
        break;
    #endif
    default:
        break;
    }
}// SFZWebBrowserControl::NotifyHandler //

参照

SFZWebBrowserControl::SetHistorySize | SFZWebBrowserControl::Reload | SFYControl::SetMaximumValue | SFZWebBrowserControl::HistoryEntry | SFZWebBrowserControl::DEFAULT | SFZWebBrowserControl::DoneNotify | SFZWebBrowserControl::ResponseNotify | SFZWebBrowserControl::FocusNotify | SFZWebBrowserControl::JumpNotify | SFBHTMLViewer | SFBWeb | SFBWebResp | BREW API IHtmlViewer | BREW API IWeb| BREW API IWebResp


SFZWebBrowserControl::~SFZWebBrowserControl
SFZWebBrowserControl クラスのデストラクタです。
[ public, virtual ]
~SFZWebBrowserControl(Void);

解説

このデストラクタは、通信、 HTML のレンダリングを中断し、内部で確保した全てのリソースを解放します。

内部実装

このデストラクタの内部実装は以下の通りです。

/*protected virtual */SFZWebBrowserControl::~SFZWebBrowserControl(Void)
{
    if (_viewer != null) {
        RenderSafe();
        Stop();
        _viewer->Reset();
    }
    ClearWebRespAndOpts();
    if (_history != null) {
        ::delete [] _history;
    }
    if (_stateHistory != null) {
        ::delete [] _stateHistory;
    }
}// SFZWebBrowserControl::~SFZWebBrowserControl //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::Stop


SFZWebBrowserControl::ClearHistory
履歴リストを空にします。
[ public ]
Void ClearHistory(Void);

解説

この関数は、履歴リストを空にします。

[Note] 注意

現在の履歴番号は 0 に戻ります。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFZWebBrowserControl::ClearHistory(Void)
{
    UInt32                              i;

    for (i = 0; i < GetHistorySize(); ++i) {
        _history[i].title = SFXAnsiString::EmptyInstance();
        _history[i].url = SFXAnsiString::EmptyInstance();
    }
    SetCurrentValue(0);
    return;
}// SFZWebBrowserControl::ClearHistory //

参照

SFZWebBrowserControl::GetCurrentHistoryIndex


SFZWebBrowserControl::DoneNotifyHandler
[ハンドラ] レンダリングが終了したときに呼び出されるハンドラです。
[ protected, virtual ]
Void DoneNotifyHandler(
    DoneNotifyConstRef notify   // 通知情報
);

引数

notify

HTTP のレスポンスコード、 BREW のエラーコードが通知されます。

解説

この関数は、レンダリングが終了したときに呼び出されるハンドラです。

デフォルトの実装は、何も行いません。

タイムアウトなどのエラー処理を行う場合は、 この関数をオーバーロードして処理を記述する必要があります。

[Note] 注意

SFZWebBrowserControl::ResponseNotifyHandler 関数と呼び出されるタイミングが異なります。

使用例

以下は、オーバーロードしてエラー処理を行うコードです。

#include <SFZResponder/SFZControl/SFZWebBrowserControl.hpp>

SFMTYPEDEFRESPONDER(MyBrowserControl)
class MyBrowserControl : public SFZWebBrowserControl {
    SFBSEALRESPONDER(MyBrowserControl)
    SFMRESPONDERINSTANTIATEFOUR(MyBrowserControl, SFZWebBrowserControl, SFYControl, SFYWidget, SFYResponder)
public:
    static MyBrowserControlSmp NewInstance(SFCErrorPtr exception = null);
protected:
    explicit MyBrowserControl(Void) static_throws;
    virtual ~MyBrowserControl(Void);
    virtual Void DoneNotifyHandler(DoneNotifyConstRef notify) {
        if (notify.GetErrorCode() != SFERR_NO_ERROR) {
            // 通信エラーならエラーダイアログを表示する
            ErrorDialog(notify.GetErrorCode());
        }
        else if (WEB_SUCCEEDED(notify.GetDoneCode())) {
            // HTTP エラーなら警告ダイアログを表示する
            WarningDialog(notify.GetResposenCode());
        }
    }
};

内部実装

この関数の内部実装は以下の通りです。

/*protected virtual */Void SFZWebBrowserControl::DoneNotifyHandler(DoneNotifyConstRef notify)
{
    unused(notify);
    return;
}// SFZWebBrowserControl::DoneNotifyHandler //

参照

SFZWebBrowserControl::DoneNotify | SFZWebBrowserControl::FocusNotifyHandler | SFZWebBrowserControl::JumpNotifyHandler | SFZWebBrowserControl::ResponseNotifyHandler


SFZWebBrowserControl::FindElement
現在表示中のページから、指定された要素を検索します。
[ public, const ]
SInt32 FindElement(
    ACharConstPtr element   // 検索する要素名
    SInt32 no               // 取得する要素の番号
);

引数

element

検索する要素名を指定します。

no

検索する要素の何番目の位置を取得するかを指定します。

0 を指定すると、element 引数の名前と一致する最初の要素の位置を返します。 n を指定すると、 element 引数の名前と一致する n + 1 番目の要素の位置を返します。

戻り値

  • 見つかった場合: 要素の位置
  • 見つからなかった場合: IHTMLVIEWER_NOTFOUND
  • element 引数の値が認識可能な要素名ではない場合: IHTMLVIEWER_BADELEMENT

解説

この関数は、現在表示中のページから、指定された要素を検索します。

[Note] 注意

この関数は、内部で SFBHTMLViewer::FindElem 関数( BREW API IHTMLVIEWER_FindElem)を呼び出します。

[Tip] Tip

戻り値(要素の位置)は、SFZWebBrowserControl::GetElementText 関数で使用します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SInt32 SFZWebBrowserControl::FindElement(ACharConstPtr element, SInt32 no) const
{
    return _viewer->FindElem(element, no);
}// SFZWebBrowserControl::FindElement //

参照

SFZWebBrowserControl::GetElementText | BREW API IHTMLVIEWER_FindElem


SFZWebBrowserControl::FocusNotifyHandler
[ハンドラ] カーソルが移動したときに呼び出されるハンドラです。
[ protected, virtual ]
Void FocusNotifyHandler(
    FocusNotifyConstRef notify   // 通知情報
);

引数

notify

現在カーソルがあたっているタグの位置、種類、状態が通知されます。

解説

この関数は、カーソルが移動したときに呼び出されるハンドラです。

デフォルトの実装以外の処理を行いたい場合は、 この関数をオーバーライドします。

デフォルトの実装は、何も行いません。

内部実装

この関数の内部実装は以下の通りです。

/*protected virtual */Void SFZWebBrowserControl::FocusNotifyHandler(FocusNotifyConstRef notify)
{
    unused(notify);
    return;
}// SFZWebBrowserControl::FocusNotifyHandler //

参照

SFZWebBrowserControl::FocusNotify | SFZWebBrowserControl::DoneNotifyHandler | SFZWebBrowserControl::JumpNotifyHandler | SFZWebBrowserControl::ResponseNotifyHandler


SFZWebBrowserControl::GetCurrentHistory
現在表示しているページの履歴内容(URL とタイトル)を取得します。
[ public, const ]
HistoryEntry GetCurrentHistory(Void);

戻り値

現在表示しているページの履歴内容(URL とタイトル)。

解説

この関数は、現在表示しているページの履歴内容(URL とタイトル)を取得します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFZWebBrowserControl::HistoryEntry SFZWebBrowserControl::GetCurrentHistory(Void) const
{
    return GetHistory(GetCurrentHistoryIndex());
}// SFZWebBrowserControl::GetCurrentHistory //

参照

SFZWebBrowserControl::GetCurrentHistoryIndex | SFZWebBrowserControl::GetHistory | SFZWebBrowserControl::HistoryEntry


SFZWebBrowserControl::GetCurrentHistoryIndex
現在の履歴番号を取得します。
[ public, const ]
UInt32 GetCurrentHistoryIndex(Void);

戻り値

現在表示しているページの履歴番号。

解説

この関数は、現在の履歴番号を取得します。

[Note] 注意

現在の履歴番号は、 SFZWebBrowserControl::Move 関数、 SFZWebBrowserControl::Previous 関数、 SFZWebBrowserControl::Next 関数で増減し、 SFZWebBrowserControl::ClearHistory 関数で 0 に初期化されます。

内部実装

この関数の内部実装は以下の通りです。

/*public */inline UInt32 SFZWebBrowserControl::GetCurrentHistoryIndex(Void) const
{
    return static_cast<UInt32>(GetCurrentValue());
}// SFZWebBrowserControl::GetCurrentHistoryIndex //

参照

SFZWebBrowserControl::Move | SFZWebBrowserControl::Previous | SFZWebBrowserControl::Next | SFZWebBrowserControl::ClearHistory


SFZWebBrowserControl::GetElementText
指定された要素の内容を取得します。
[ public, const ]
SFXAnsiString GetElementText(
    SInt32 elementIndex   // 要素の位置
);

引数

elementIndex

要素の位置を指定します。 この引数には、 SFZWebBrowserControl::FindElement 関数の戻り値を指定します。

戻り値

指定された要素の内容。

解説

この関数は、現在表示しているページから指定された要素の内容を取得します。

要素の中身がない場合は空文字列 SFXAnsiString::EmptyInstance() を返します。

[Note] 注意

この関数は、内部で SFBHTMLViewer::GetElemText 関数( BREW API IHTMLVIEWER_GetElemText)を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFXAnsiString SFZWebBrowserControl::GetElementText(SInt32 index) const
{
    SInt32                              len;
    SInt32                              size(128);
    SFXAnsiString                       result;

    for (result.SetThreshold((UInt16)size); (len = _viewer->GetElemText(index, &result)) == size; result.SetThreshold((UInt16)size)) {
        if (len != IHTMLVIEWER_BADELEMENT) {
            size *= 2;
        }
        else {
            result = SFXAnsiString::EmptyInstance();
            break;
        }
    }
    return result;
}// SFZWebBrowserControl::GetElemText //

参照

SFZWebBrowserControl::FindElement | SFXAnsiString::EmptyInstance | SFBHTMLViewer::GetElemText | BREW API IHTMLVIEWER_GetElemText


SFZWebBrowserControl::GetHistory
指定された履歴番号の履歴内容を取得します。
[ public, const ]
HistoryEntry GetHistory(
    UInt32 historyIndex = 0   // 履歴番号
);

引数

historyIndex

履歴番号を指定します。 指定しなければ、履歴番号 0 番(最後に訪れた履歴内容)になります。

戻り値

指定された履歴番号の履歴内容。

解説

この関数は、指定された履歴番号の履歴内容を取得します。

履歴情報がない、もしくは無効な履歴番号を指定された場合は、 戻り値の履歴内容である SFZWebBrowserControl::HistoryEntry 構造体の url 変数には空文字列 SFXAnsiString::EmptyInstance() が返却されます。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFZWebBrowserControl::HistoryEntry SFZWebBrowserControl::GetHistory(UInt32 index) const
{
    HistoryEntry dummy;

    if (index < GetHistorySize()) {
        return _history[index];
    }
    else {
        dummy.url = SFXAnsiString::EmptyInstance();
        return dummy;
    }
}// SFZWebBrowserControl::GetHistory //

参照

SFZWebBrowserControl::GetHistorySize | SFZWebBrowserControl::GetHistoryList | SFZWebBrowserControl::GetCurrentHistory | SFXAnsiString::EmptyInstance | SFZWebBrowserControl::HistoryEntry


SFZWebBrowserControl::GetHistoryList
履歴リストを取得します。
[ public, const ]
HistoryEntryConstPtr GetHistoryList(Void);

戻り値

履歴リストへのポインタ。

解説

この関数は、履歴リストを取得します。

[Note] 注意

配列の先頭は一番新しい履歴となっており、 履歴番号と配列のインデックスは一致します。

履歴リストは SFZWebBrowserControl::HistoryEntry 構造体の配列です。 そのサイズは SFZWebBrowserControl::GetHistorySize 関数で取得できます。

履歴情報が設定されていない場合、 SFZWebBrowserControl::HistoryEntry 構造体の url 変数には空文字列 SFXAnsiString::EmptyInstance() が設定されています。

[Warning] 使用上の注意

履歴リストの内容は書き換えてはいけません。

使用例

以下は、すべての履歴内容(タイトルと URL)をデバッグ表示するコードです。

void PrintHistoryList(SFBrowserControlConstRef browser)
{
    int i;
    SFBrowserControl::HistoryEntryConstPtr historyList = browser.GetHistoryList();
    for (i=0; i < browser.GetHistorySize(); i++) {
        DBGPRINTF("title '%s' url %s",
                  (ACharConstPtr)historyList[i].title, (ConstACharPtr)historyList[i].url); 
    }
}

内部実装

この関数の内部実装は以下の通りです。

/*public */inline SFZWebBrowserControl::HistoryEntryConstPtr SFZWebBrowserControl::GetHistoryList(Void) const
{
    return _history;
}// SFZWebBrowserControl::GetHistoryList //

参照

SFZWebBrowserControl::GetHistorySize | SFZWebBrowserControl::HistoryEntry


SFZWebBrowserControl::GetHistorySize
履歴リストのエントリ数を取得します。
[ public, const ]
UInt32 GetHistorySize(Void);

戻り値

履歴リストのエントリ数。

解説

この関数は、履歴リストのエントリ数を取得します。

[Caution] 注意

SFZWebBrowserControl::Move 関数や SFZWebBrowserControl::GetHistory 関数などで使用する履歴番号は、 履歴リストのエントリ数より小さな値でなければいけません。

[Tip] Tip

履歴リストは SFZWebBrowserControl::GetHistoryList 関数を使用して取得できます。

内部実装

この関数の内部実装は以下の通りです。

/*public */inline UInt32 SFZWebBrowserControl::GetHistorySize(Void) const
{
    return static_cast<UInt32>(GetMaximumValue());
}

参照

SFZWebBrowserControl::SetHistorySize | SFZWebBrowserControl::GetHistory | SFZWebBrowserControl::GetHistoryList | SFZWebBrowserControl::Move


SFZWebBrowserControl::GetIndent
HTML 表示のインデントの幅を取得します。[単位: ピクセル]
[ public, const ]
SInt32 GetIndent(Void);

戻り値

インデントの幅。[単位: ピクセル]

解説

この関数は、HTML 表示のインデントの幅を取得します。[単位: ピクセル]

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_N_INDENT" を指定して BREW API IHTMLVIEWER_GetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SInt32 SFZWebBrowserControl::GetIndent(Void) const
{
    HVOpt                               opt;
    SInt32                              pixel;

    if (_viewer->GetOption(HVOPT_N_INDENT, &opt) == SFERR_NO_ERROR) {
        pixel = SInt32(opt);
    }
    else {
        pixel = -1;
    }
    return pixel;
}// SFZWebBrowserControl::GetIndent //

参照

SFZWebBrowserControl::SetIndent | SFBHTMLViewer::GetOption | BREW API IHTMLVIEWER_GetOption


SFZWebBrowserControl::GetLinkColor
HTML 表示のリンクの文字の表示色を取得します。
[ public, const ]
SFXRGBColor GetLinkColor(Void);

戻り値

リンク文字列の表示色。

解説

この関数は、HTML 表示のリンクの文字の表示色を取得します。

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_RGB_LINK" を指定して BREW API IHTMLVIEWER_GetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFXRGBColor SFZWebBrowserControl::GetLinkColor(Void) const
{
    HVOpt                               opt;
    SFXRGBColor                         color;

    if (_viewer->GetOption(HVOPT_RGB_LINK, &opt) == SFERR_NO_ERROR) {
        color = SFXRGBColor(RGBVAL(opt));
    }
    return color;
}// SFZWebBrowserControl::GetLinkColor //

参照

SFZWebBrowserControl::SetLinkColor | SFZWebBrowserControl::GetTextColor | SFBHTMLViewer::GetOption | BREW API IHTMLVIEWER_GetOption


SFZWebBrowserControl::GetParagraphSpacing
HTML 表示の段落間の行間の長さを取得します。[単位: ピクセル]
[ public, const ]
SInt32 GetParagraphSpacing(Void);

戻り値

段落間の行間の長さ。[単位: ピクセル]

解説

この関数は、HTML 表示の段落間の行間の長さを取得します。[単位: ピクセル]

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_N_VSPACE" を指定して BREW API IHTMLVIEWER_GetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SInt32 SFZWebBrowserControl::GetParagraphSpacing(Void) const
{
    HVOpt                               opt;
    SInt32                              pixel;

    if (_viewer->GetOption(HVOPT_N_VSPACE, &opt) == SFERR_NO_ERROR) {
        pixel = SInt32(opt);
    }
    else {
        pixel = -1;
    }
    return pixel;
}// SFZWebBrowserControl::GetParagraphSpacing //

参照

SFZWebBrowserControl::SetParagraphSpacing | SFBHTMLViewer::GetOption | BREW API IHTMLVIEWER_GetOption


SFZWebBrowserControl::GetScrollbarWidth
スクロールバーの幅を取得します。[単位: ピクセル]
[ public, const ]
SInt32 GetScrollbarWidth(Void);

戻り値

スクロールバーの幅。[単位: ピクセル]

解説

この関数は、HTML 表示のスクロールバーの幅を取得します。[単位: ピクセル]

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_N_SBWIDTH" を指定して BREW API IHTMLVIEWER_GetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SInt32 SFZWebBrowserControl::GetScrollbarWidth(Void) const
{
    HVOpt                               opt;
    SInt32                              pixel;

    if (_viewer->GetOption(HVOPT_N_SBWIDTH, &opt) == SFERR_NO_ERROR) {
        pixel = SInt32(opt);
    }
    else {
        pixel = -1;
    }
    return pixel;
}// SFZWebBrowserControl::GetScrollbarWidth //

参照

SFZWebBrowserControl::SetScrollbarWidth | SFBHTMLViewer::GetOption | BREW API IHTMLVIEWER_GetOption


SFZWebBrowserControl::GetTextColor
テキストの表示色を取得します。
[ public, const ]
SFXRGBColor GetTextColor(Void);

戻り値

HTML 表示のテキストの表示色。

解説

この関数は、HTML 表示のテキストの表示色を取得します。

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_RGB_TEXT" を指定して BREW API IHTMLVIEWER_GetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFXRGBColor SFZWebBrowserControl::GetTextColor(Void) const
{
    HVOpt                               opt;
    SFXRGBColor                         color;

    if (_viewer->GetOption(HVOPT_RGB_TEXT, &opt) == SFERR_NO_ERROR) {
        color = SFXRGBColor(RGBVAL(opt));
    }
    return color;
}// SFZWebBrowserControl::GetTextColor //

参照

SFZWebBrowserControl::SetTextColor | SFZWebBrowserControl::GetLinkColor | SFBHTMLViewer::GetOption | BREW API IHTMLVIEWER_GetOption


SFZWebBrowserControl::GetWeb
IWeb インターフェースを取得します。
[ public, const ]
SFBWebSmpConstRef GetWeb(Void);

戻り値

SFZWebBrowserControl::SetWeb 関数で設定された IWeb インターフェース。

解説

この関数は、このコントロールが内部で保持する  BREW API IWeb インターフェースを取得します。

BREW API IWeb インターフェースが設定されていない場合は、null を返します。

[Important] WebOpt 指定時の注意

他の用途で利用するまでは、IWeb インターフェースに設定した WebOpt データを保持する必要があります。

詳しくは、BREW API リファレンス、IWeb インターフェースの「 WEBOPT の寿命に関する注意事項 」を参照してください。

[Important] サスペンド時の振る舞い

サスペンドしたとき、WebOpt の情報はリセットされ IWeb インターフェースを内部で作成する設定(デフォルト状態)に戻ります。

サスペンド前の IWeb インターフェースを使うには、レジューム時に WebOpt データを再設定する必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*public */inline SFBWebSmpConstRef SFZWebBrowserControl::GetWeb(Void) const
{
    return _web;
}// SFZWebBrowserControl::GetWeb //

参照

SFZWebBrowserControl::SetWeb | SFZWebBrowserControl::UnsetWeb | SFBWeb | BREW API IWeb


SFZWebBrowserControl::HandleBoundGlobal
[非推奨(廃止予定 API)] グローバル領域が変化したときに呼び出される関数です。
[ protected, virtual ]
Void HandleBoundGlobal(
    SFXRectangleConstRef rectangle   // グローバル領域
);

解説

この関数は、 領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_GLOBAL, rectangle)] を受信したときに呼び出されます。

グローバル領域の変更時に追加の処理を行いたい場合は、 この関数をオーバーライドします。

デフォルトの実装は、内部で保持する BREW API IHtmlViewer インスタンスの領域をこのコントロールを上下左右 3 ピクセルずつ縮小した矩形領域に設定します。

[Note] (SFEVT_RESPONDER_BOUND, SFP16_BOUND_GLOBAL) イベントの送信

領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_GLOBAL, rectangle)] は SFYResponder::SetRealBound または SFYResponder::SetVirtualBound 関数の呼び出しによってグローバル領域が変化したときに発生します。

このとき、(SFEVT_RESPONDER_BOUND, SFP16_BOUND_GLOBAL) イベントは描画エンジンを起動した直後、描画エンジンによって送信されます。

[Note] グローバル領域の変更時の処理

この仮想関数をオーバーライドする以外に、 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]を定義・実装し レスポンダに登録して行うことも可能です。

グローバル領域の変更処理は、最初に仮想関数を実行し、次に領域イベント専用ハンドラを登録した順に実行して行われます。

領域イベント専用ハンドラを宣言し登録する手間が省けるので、 通常はこの仮想関数をオーバーライドして処理を記述します。

[Note] [非推奨(廃止予定 API)]

この関数は、SophiaFramework UNIVERSE 6.0 で廃止される予定です。 描画ハンドラの処理などでグローバル領域が必要な場合は、 SFYResponder::GetGlobalBound 関数を呼び出して取得してください。

内部実装

この関数の内部実装は以下の通りです。

#define     VIEWER_MARGIN           (3)

/*protected virtual */Void SFZWebBrowserControl::HandleBoundGlobal(SFXRectangleConstRef rectangle)
{
    AdjustViewer(rectangle);
}// SFZWebBrowserControl::HandleBoundGlobal //

/*private */Void SFZWebBrowserControl::AdjustViewer(SFXRectangleConstRef rectangle) const
{
    SFXRectangle                        grect(rectangle);

    grect.Deflate(VIEWER_MARGIN, VIEWER_MARGIN);
    _viewer->SetRect(grect);
}// SFZWebBrowserControl::AdjustViewer //

参照

SFBControl::SetRect | SFYResponder::SetRealBound | SFYResponder::SetVirtualBound | グローバル領域 | 領域イベント[SFEVT_RESPONDER_BOUND]


SFZWebBrowserControl::HandleRenderRequest
描画イベントを受信したときに呼び出される関数です(レスポンダを描画します)。
[ protected, virtual, const ]
Void HandleRenderRequest(
    SFXGraphicsPtr graphics   // グラフィックスオブジェクト
);

解説

この関数は、 描画イベント [SFXEvent(SFEVT_RESPONDER_RENDER, SFP16_RENDER_REQUEST, graphics)] を受信したときに呼び出されます。

デフォルトの実装は、このレスポンダを描画します。 詳細は、内部実装コードを参照してください。

枠線の色を変更するなど独自の描画処理を行いたい場合は、この関数をオーバーライドします。

[Note] レスポンダの描画手順

  1. SFYResponder::Invalidate 関数を使用して再描画領域を登録します。
  2. アプリ開始時とレジューム時に全画面再描画を行う SFYApplication::HandleRender 関数内、 イベントループの最後、 あるいは、コールバックなどのイベントループの外で、 自動的に、あるいは、明示的に SFYResponder::Render 関数を呼び出します。
  3. 描画エンジンが起動されます。
  4. 再描画が必要なレスポンダだけが描画イベントを受信します。
  5. SFYWidget クラスを継承するレスポンダが描画イベントを受信すると、 SFYWidget::SFYWidget コンストラクタで最初に登録した描画ハンドラの処理により、 SFYWidget::HandleRenderRequest 仮想関数が呼び出されます。 その後、描画ハンドラが登録した順に呼び出されます。
  6. 実際にレスポンダが描画されます。

[Tip] Tip
描画ハンドラの宣言と登録の手間を省けるので、 通常は SFYWidget::HandleRenderRequest 仮想関数だけを利用してレスポンダを描画します。

内部実装

この関数の内部実装は以下の通りです。

/*protected virtual */Void SFZWebBrowserControl::HandleRenderRequest(SFXGraphicsPtr graphics) const
{
    static SFXBevelColor::AtomRecConst  frameRgb = {
        {{{0x00, 0xAA, 0xAA, 0xAA}}}, {{{0x00, 0xFF, 0xFF, 0xFF}}}, {{{0x00, 0xFF, 0xFF, 0xFF}}}
    };
    static SFXRGBColor::AtomRecConst    theme[] = {
        {{{0x00, 0x00, 0x00, 0x00}}},
        {{{0x00, 0xDD, 0x99, 0x99}}},
        {{{0x00, 0x99, 0xDD, 0x99}}},
        {{{0x00, 0xFF, 0xFF, 0xFF}}},
        {{{0x00, 0x66, 0x66, 0x66}}}
    };
    SFBDisplaySmp                       display;
    SFXRectangle                        rectangle(GetLocalBound());
    SFXRectangle                        grect(GetGlobalBound());

    graphics->DrawBevelRectangle(rectangle, frameRgb);
    rectangle.Deflate(1, 1);
    graphics->DrawRectangle(rectangle, theme[0]);
    rectangle.Deflate(1, 1);
    if (GetStateFocus()) {
        graphics->DrawRectangle(rectangle, theme[1]);
    }
    else {
        graphics->DrawRectangle(rectangle, theme[3]);
    }
    if (_fullscreen_edit) {
        display = SFXGraphics::GetInstance()->GetSFBDisplay();
        display->ResetClipRect();
    }
    _viewer->Redraw();
}// SFZWebBrowserControl::HandleRenderRequest //

参照

SFYResponder::Invalidate | SFYResponder::Render | SFYWidget::SetBackgroundColor | 描画イベント[SFEVT_RESPONDER_RENDER] | 描画イベント専用ハンドラ[XANDLER_DECLARE_VOIDRENDER] | 描画処理 | イベントループ | レスポンダツリー


SFZWebBrowserControl::IsBusy
通信中またはレンダリング中であるかどうかを判定をします。
[ public, const ]
Bool IsBusy(Void);

戻り値

  • 通信中、またはレンダリング中のとき: true
  • それ以外のとき: false

解説

この関数は、通信中またはレンダリング中であるかどうかを判定をします。

内部実装

この関数の内部実装は以下の通りです。

/*public */Bool SFZWebBrowserControl::IsBusy(Void) const
{
    return _webCallback.IsQueued() || _viewer->IsBusy();
}// SFZWebBrowserControl::IsBusy //


SFZWebBrowserControl::IsInlineEditEnable
文字をインラインで入力する設定であるかどうかを判定します。
[ public, const ]
Bool IsInlineEditEnable(Void);

戻り値

  • インライン入力のとき: true
  • 全画面入力のとき: false

解説

この関数は、文字をインラインで入力する設定であるかどうかを判定します。

参照

SFZWebBrowserControl::SetInlineEditEnable


SFZWebBrowserControl::IsScrollbarEnable
スクロールバーがあるかどうかを判定をします。
[ public, const ]
Bool IsScrollbarEnable(Void);

戻り値

  • あるとき: true
  • そうでないとき: false

解説

この関数は、スクロールバーがあるかどうかを判定をします。

参照

SFZWebBrowserControl::SetScrollbarEnable


SFZWebBrowserControl::JumpNotifyHandler
[ハンドラ] リンクが押されたときに呼び出されるハンドラです。
[ protected, virtual ]
Void JumpNotifyHandler(
    JumpNotifyConstRef notify   // 通知情報
);

引数

notify

リンク先 URL、 HTTP メソッド、 POST データが通知されます。

解説

この関数は、リンクが押されたときに呼び出されるハンドラです。

デフォルトの実装以外の処理を行いたい場合は、 この関数をオーバーライドします。

デフォルトの実装は、リンク先 url を自動的に Open します。

リンクが http://、https://、file://、res: 以外のスキームのときは何もしません。

使用例

以下のコードでは、 リンクが mailto: ならメーラーを呼ぶようにこの関数をオーバーライドしています。

#include <SFZResponder/SFZControl/SFZWebBrowserControl.hpp>

SFMTYPEDEFRESPONDER(MyBrowserControl)
class MyBrowserControl : public SFZWebBrowserControl {
    SFBSEALRESPONDER(MyBrowserControl)
    SFMRESPONDERINSTANTIATEFOUR(MyBrowserControl, SFZWebBrowserControl, SFYControl, SFYWidget, SFYResponder)
public:
    static MyBrowserControlSmp NewInstance(SFCErrorPtr exception = null);
protected:
    explicit MyBrowserControl(Void) static_throws;
    virtual ~MyBrowserControl(Void);
    virtual Void JumpNotifyHandler(JumpNotifyConstRef notify) {
        if (notify.GetUrl().StartWith("mailto:")) {
            // mailto:ならメーラーを呼ぶ
            Mailer(notify.GetUrl());
        }
        else {
            // それ以外なら標準ハンドラを呼ぶ
            SFZWebBrowserControl::JumpNotifyHandler(notify);
        }
    }
};

内部実装

この関数の内部実装は以下の通りです。

/*protected virtual */Void SFZWebBrowserControl::JumpNotifyHandler(JumpNotifyConstRef notify)
{
    SFXAnsiString                       url;
    SFBWebUtilSmp                       webUtil;
    SFCError                            error(SFERR_NO_ERROR);

    if ((webUtil = SFBWebUtil::NewInstance(&error)) != null) {
        if (!_history[GetCurrentHistoryIndex()].url.IsEmpty()) {
            url = webUtil->MakeUrl(_history[GetCurrentHistoryIndex()].url, notify.GetUrl());
        }
        else {
            url = notify.GetUrl();
        }
        if (notify.GetType() == HVN_JUMP) {
            Navigate(url);
        }
        else {
            if (notify.GetMethod().Compare("POST") == 0) {
                Navigate(url, notify.GetMethod(), notify.GetData());
            }
            else {
                Navigate(url, notify.GetMethod());
            }
        }
    }
    return;
}// SFZWebBrowserControl::JumpNotifyHandler //

参照

SFZWebBrowserControl::JumpNotify | SFZWebBrowserControl::Navigate | SFZWebBrowserControl::DoneNotifyHandler | SFZWebBrowserControl::FocusNotifyHandler | SFZWebBrowserControl::ResponseNotifyHandler


SFZWebBrowserControl::Load
指定された文字列を HTML 文書とみなして、レンダリングを開始します。
[ public ]
SFCError Load(
    SFXAnsiStringConstRef data   // HTML 文書
);
[ public ]
SFCError Load(
    SFXAnsiStringConstRef data   // HTML 文書
    SFXAnsiStringConstRef url    // 基準となる URL
);

引数

data

HTML 文書とみなす文字列です。

url

基準となる URL です。 HTML 文書内にある相対 URL 表記は、 この引数で指定された URL からの相対パスと解釈されます。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY
  • 指定された url が正しくないとき: SFERR_INVALID_PARAM
  • 内部で保持する BREW API IWeb インターフェースのインスタンス生成に失敗したとき: SFERR_FAILED

解説

この関数は、指定された文字列を HTML 文書とみなして、レンダリングを開始します。

[Note] 注意

インライン画像は取得できしだい表示されます。

[Important] 通信に関するエラー

通信に関するエラーは戻り値では取得できません。

レンダリングの終了や、通信に関するエラーを取得する場合は、 SFZWebBrowserControl クラスを継承して、 SFZWebBrowserControl::DoneNotifyHandler 関数をオーバロードするクラスを作成する必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::Load(SFBSourceSmpConstRef source)
{
    return Load(source, UNKNOWN_URL);
}// SFZWebBrowserControl::Load(SFBSourceSmpConstRef source) //

/*public */SFCError SFZWebBrowserControl::Load(SFBSourceSmpConstRef source, SFXAnsiStringConstRef url)
{
    SFCError                            error(SFERR_NO_ERROR);

    ReorderHistory();
    if (IsBusy()) {
        Stop();
    }
    if ((error = WebSetup(url)) == SFERR_NO_ERROR) {
        _history[GetCurrentHistoryIndex()].url = url;
        _viewer->SetURL(url);
        _viewer->SetIWeb(_web);
        _viewer->LoadSource(source);
    }
    return error;
}// SFZWebBrowserControl::Load(SFBSourceSmpConstRef source, SFXAnsiStringConstRef url) //

/*private */Void SFZWebBrowserControl::ReorderHistory(Void)
{
    UInt32                              i;
    UInt32                              j;

    _stateHistory[GetCurrentHistoryIndex()] = _viewer->GetViewState();
    if (GetCurrentHistoryIndex() == 0) {
        for (i = GetHistorySize() - 1; i >= 1; --i) {
            _history[i] = _history[i - 1];
            _stateHistory[i] = _stateHistory[i - 1];
        }
    }
    else {
        for (i = 1; i < GetHistorySize(); ++i) {
            j = GetCurrentHistoryIndex() + i - 1;
            if (j < GetHistorySize()) {
                _history[i] = _history[j];
                _stateHistory[i] = _stateHistory[j];
            }
            else {
                ClearHistory(i);
            }
        }
    }
    ClearHistory(0);
    SetCurrentValue(0);
}// SFZWebBrowserControl::ReorderHistory //

/*private */SFCError SFZWebBrowserControl::WebSetup(SFXAnsiStringConstRef url)
{
    SFBWebUtilSmp                       webUtil;
    UrlParts                            parts;
    WebOpt                              webopt[4];
    UIntN                               num;
    SFCError                            error;

    if ((webUtil = SFBWebUtil::NewInstance(&error)) != null) {
        ClearWebSubset();
        if (_web == null) {
            if ((_web = SFBWeb::NewInstance(&error)) == null) {
                error = SFERR_FAILED;
            }
        }
        if (error == SFERR_NO_ERROR) {
            if (webUtil->ParseUrl(url, &parts) == SFERR_NO_ERROR) {
                if (url.StartsWith("http://") || url.StartsWith("https://") || url.StartsWith("file://") || url.StartsWith("res:")) {
                    num = 0;
                    webopt[num].nId = WEBOPT_FLAGS;
                    webopt[num].pVal = null;
                    _web->GetOpt(WEBOPT_FLAGS, null, &webopt[num]);
                    webopt[num].pVal = (VoidPtr)(WEBREQUEST_NOWAITCONN | ((UInt32)webopt[num].pVal));
                    ++num;
                    if (url.StartsWith("https://")) {
                        if ((_optSsl = SFBSSLRootCerts::NewInstance(&error)) != null) {
                            webopt[num].nId = WEBOPT_DEFAULTS;
                            webopt[num].pVal = interface_cast(_optSsl.Get());
                            ++num;
                        }
                        else {
                            error = SFERR_INVALID_PARAM;
                        }
                    }
                    if (error == SFERR_NO_ERROR) {
                        if (!_authHeader.IsEmpty()) {
                            RemoveHeader(_authHeader);
                        }
                        if (UP_HASUSER(&parts)) {
                            _authBaseUrl = SFXAnsiString::EmptyInstance();
                            if (!_authHeader.IsEmpty()) {
                                _authHeader.Clear();
                            }
                            MakeAuthHeader(parts.cpcUser, parts.cpcHost - parts.cpcUser - 1); // -1 for '@'
                            if (_authHeader.IsEmpty()) {
                                error = SFERR_NO_MEMORY;
                            }
                        }
                        else if (!_authBaseUrl.IsEmpty() && (!url.StartsWith(_authBaseUrl))) {
                            if (!_authHeader.IsEmpty()) {
                                _authHeader.Clear();
                            }
                            _authBaseUrl = SFXAnsiString::EmptyInstance();
                        }
                        if (error == SFERR_NO_ERROR) {
                            if (!_authHeader.IsEmpty()) {
                                webopt[num].nId = WEBOPT_HEADER;
                                webopt[num].pVal = _authHeader.GetBuffer();
                                ++num;
                            }
                            webopt[num].nId = WEBOPT_END;
                            ASSERT(num < lengthof(webopt) - 1);
                            error = _web->AddOpt(webopt);
                        }
                    }
                }
                else {
                    error = SFERR_INVALID_PARAM;
                }
            }
            else {
                error = SFERR_INVALID_PARAM;
            }
        }
    }
    return error;
}// SFZWebBrowserControl::WebSetup //

参照

SFZWebBrowserControl::Navigate | SFZWebBrowserControl::DoneNotifyHandler | SFZWebBrowserControl::GetCurrentHistoryIndex | SFZWebBrowserControl::IsBusy | SFZWebBrowserControl::Stop


SFZWebBrowserControl::Move
指定された履歴番号のページへ移動し、ページの再取得と再レンダリングを行います。
[ public ]
SFCError Move(
    UInt32 historyIndex = 0   // 履歴番号
);

引数

historyIndex

ジャンプ先の履歴番号を指定します。 省略時は、履歴番号 0、最新の履歴に飛びます。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY
  • historyIndex 引数の履歴番号が履歴リストに存在しないとき: SFERR_INVALID_PARAM
  • 失敗したとき: SFERR_FAILED

解説

この関数は、指定された履歴番号のページへ移動し、ページの再取得と再レンダリングを行います。

[Important] 通信に関するエラー

通信に関するエラーは戻り値では取得できません。

レンダリングの終了や、通信に関するエラーを取得する場合は、 SFZWebBrowserControl クラスを継承して、 SFZWebBrowserControl::DoneNotifyHandler 関数をオーバロードするクラスを作成する必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::Move(UInt32 index)
{
    SFCError                            error(SFERR_NO_ERROR);

    if (index < GetHistorySize() && !_history[index].url.IsEmpty()) {
        _stateHistory[GetCurrentHistoryIndex()] = _viewer->GetViewState();
        SetCurrentValue(index);
        error = OpenImpl(_history[GetCurrentHistoryIndex()].url, NULL_STR, NULL_BUFFER);
    }
    else {
        error = SFERR_INVALID_PARAM;
    }
    return error;
}// SFZWebBrowserControl::Move //

/*private */SFCError SFZWebBrowserControl::OpenImpl(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method, SFXBufferConstRef data)
{
    WebOpt                              webopt[4];
    UIntN                               num(0);
    SFBSourceUtilSmp                    su;
    SFCError                            error(SFERR_NO_ERROR);

    if (url.StartsWith("http://") || url.StartsWith("https://")) {
        if (IsBusy()) {
            Stop();
        }
        if ((error = WebSetup(url)) == SFERR_NO_ERROR) {

            // set additonal http option
            if (!method.IsEmpty()) {
                _optMethod = method;
                webopt[num].nId = WEBOPT_METHOD;
                webopt[num].pVal = _optMethod.GetBuffer();
                ++num;
            }
            if (data.GetSize() != 0) {
                if ((_optBodyMem = MemoryAllocate(data.GetSize())) != null) {
                    SFXHelper::memcpy(_optBodyMem, data.GetBuffer(), data.GetSize());
                    _optBody.Release();
                    if ((su = SFBSourceUtil::NewInstance(&error)) != null) {
                        su->PeekFromMemory(_optBodyMem, data.GetSize(), null, null, &_optBody);
                    }
                    // *** vice versa *** //
                    if (_optBody != null) {
                        webopt[num].nId = WEBOPT_BODY;
                        webopt[num].pVal = VoidPtr(&_optBody);
                        ++num;
                    }
                    else {
                        error = SFERR_FAILED;
                    }
                }
                else {
                    error = SFERR_NO_MEMORY;
                }
            }
            if (error == SFERR_NO_ERROR) {
                webopt[num].nId = WEBOPT_END;
                ASSERT(num < lengthof(webopt) - 1);
                _webCallback.Set(WebCallback, this);
                _history[GetCurrentHistoryIndex()].url = url;
                _web->GetResponseV(&_webResp, &_webCallback, _history[GetCurrentHistoryIndex()].url, webopt);
            }
        }
    }
    else {
        error = OpenFileImpl(url);
    }
    return error;
}// SFZWebBrowserControl::OpenImpl //

/*private */SFCError SFZWebBrowserControl::OpenFileImpl(SFXAnsiStringConstRef url)
{
    static ACharConst                   fileScheme[] = "file://localhost/";
    static ACharConst                   resScheme[] = "res:";
    SFXAnsiString                       path;
    SFBFileMgrSmp                       mgr;
    SFBAStreamSmp                       file;
    SFCError                            error(SFERR_NO_ERROR);

    if (url.StartsWith(fileScheme)) {
        path = url.Substring(STRLEN(fileScheme), url.GetLength());
    }
    else if (url.StartsWith(resScheme)) {
        path = url.Substring(STRLEN(resScheme), url.GetLength());
    }
    else {
        error = SFERR_INVALID_PARAM;
    }
    if (error == SFERR_NO_ERROR) {
        if ((mgr = SFBFileMgr::NewInstance(&error)) != null) {
            file = mgr->OpenFile(path, _OFM_READ);
            if (file != null) {
                if (IsBusy()) {
                    Stop();
                }
                if ((error = WebSetup(url)) == SFERR_NO_ERROR) {
                    _history[GetCurrentHistoryIndex()].url = url;
                    _viewer->SetURL(url);
                    _viewer->SetIWeb(_web);
                    _viewer->LoadStream(file);
                }
            }
            else {
                error = SFERR_INVALID_PARAM; // XXX or mgr->GetLastError();
            }
        }
    }
    return error;
}// SFZWebBrowserControl::OpenFileImpl //

/*private static*/Void SFZWebBrowserControl::WebCallback(VoidPtr p)
{
    SFZWebBrowserControlPtr             self(reinterpret_cast<SFZWebBrowserControlPtr>(p));
    WebRespInfo*                        info = self->_webResp->GetInfo();
    ResponseNotify                      response(self->_viewer.Get(), info->nCode);
    SFBSourceSmp                        source(interface_cast(info->pisMessage));

    if (!self->ResponseNotifyHandler(response)) {
        self->_webCode = info->nCode;
        if (self->_webCode >= 0) {
            self->_viewer->SetIWeb(self->_web);
            self->_viewer->SetURL(self->_history[self->GetCurrentHistoryIndex()].url);
            self->_viewer->LoadSource(source);
            self->ClearWebRespAndOpts();
        }
        else {
            DoneNotify notify(self->_viewer.Get(), info->nCode);
            NotifyHandler(self, &notify);
        }
    }
}// SFZWebBrowserControl::WebCallback //

/*private */Void SFZWebBrowserControl::ClearWebRespAndOpts(Void)
{
    _webResp.Release();
    _optMethod = SFXAnsiString::EmptyInstance();
    _optBody.Release();
    if (_optBodyMem != null) {
        MemoryFree(_optBodyMem);
    }
    _optBodyMem = null;
    _optSsl.Release();
}

参照

SFZWebBrowserControl::DoneNotifyHandler | SFZWebBrowserControl::Navigate | SFZWebBrowserControl::Previous | SFZWebBrowserControl::Next | SFZWebBrowserControl::Reload


SFZWebBrowserControl::Navigate
指定された URL のページを取得して、レンダリングを開始します。
[ public ]
SFCError Navigate(
    SFXAnsiStringConstRef url   // 開く URL
);
[ public ]
SFCError Navigate(
    SFXAnsiStringConstRef url      // 開く URL
    SFXAnsiStringConstRef method   // HTTP メソッド
);
[ public ]
SFCError Navigate(
    SFXAnsiStringConstRef url      // 開く URL
    SFXAnsiStringConstRef method   // HTTP メソッド
    SFXAnsiStringConstRef data     // POST メソッドでサーバーに送るデータ
);
[ public ]
SFCError Navigate(
    SFXAnsiStringConstRef url      // 開く URL
    SFXAnsiStringConstRef method   // HTTP メソッド
    SFXBufferConstRef data         // POST メソッドでサーバーに送るデータ
);
[ public ]
SFCError Navigate(
    SFBSourceSmpConstRef source   // HTML のソース
);
[ public ]
SFCError Navigate(
    SFBSourceSmpConstRef source     // HTML のソース
    SFXAnsiStringConstRef basdUrl   // 基準となる URL
);
[ public ]
SFCError Navigate(
    SFBAStreamSmpConstRef stream   // HTML のストリーム
);
[ public ]
SFCError Navigate(
    SFBAStreamSmpConstRef src       // HTML のストリーム
    SFXAnsiStringConstRef baseUrl   // 基準となる URL
);

引数

url

HTTP アクセスする URL を指定します。

スキームは http、https、file と res がサポートされています。

method

HTTP アクセスするメソッドとして、GET または POST を指定します。(省略時は GET )

data

POST メソッドの場合は、サーバーに送るデータを指定します。

baseUrl

基準となる URL です。 HTML データ内にある相対 URL 表記は、 この引数で指定された URL からの相対パスと解釈されます。

source

HTML データを保持した ISource インターフェースです。

指定されたインターフェースから HTML データを読み出してレンダリングします。

stream

HTML データを保持した IAStream インターフェースです。

指定されたインターフェースから HTML データを読み出してレンダリングします。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY
  • url 引数の値が正しくないとき: SFERR_INVALID_PARAM
  • 失敗したとき: SFERR_FAILED

解説

この関数は、指定された URL のページを取得して、レンダリングを開始します。

[Note] 注意

HTML データとインライン画像の読み込みは任意のタイミングで行われ、 取得できしだい表示に反映されます。

[Important] 通信に関するエラー

通信に関するエラーは戻り値では取得できません。

レンダリングの終了や、通信に関するエラーを取得する場合は、 SFZWebBrowserControl クラスを継承して、 SFZWebBrowserControl::DoneNotifyHandler 関数をオーバロードするクラスを作成する必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url)
{
    return Navigate(url, NULL_STR, NULL_BUFFER);
}// SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url) //

/*public */SFCError SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method)
{
    return Navigate(url, method, NULL_BUFFER);
}// SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method) //

/*public */SFCError SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method, SFXAnsiStringConstRef data)
{
    return Navigate(url, method, SFXBuffer(data));
}// SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method, SFXAnsiStringConstRef data) //

/*public */SFCError SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method, SFXBufferConstRef data)
{
    ReorderHistory();
    return OpenImpl(url, method, data);
}// SFZWebBrowserControl::Navigate(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method, SFXBufferConstRef data) //

/*private */Void SFZWebBrowserControl::ReorderHistory(Void)
{
    UInt32                              i;
    UInt32                              j;

    _stateHistory[GetCurrentHistoryIndex()] = _viewer->GetViewState();
    if (GetCurrentHistoryIndex() == 0) {
        for (i = GetHistorySize() - 1; i >= 1; --i) {
            _history[i] = _history[i - 1];
            _stateHistory[i] = _stateHistory[i - 1];
        }
    }
    else {
        for (i = 1; i < GetHistorySize(); ++i) {
            j = GetCurrentHistoryIndex() + i - 1;
            if (j < GetHistorySize()) {
                _history[i] = _history[j];
                _stateHistory[i] = _stateHistory[j];
            }
            else {
                ClearHistory(i);
            }
        }
    }
    ClearHistory(0);
    SetCurrentValue(0);
}// SFZWebBrowserControl::ReorderHistory //

/*private */SFCError SFZWebBrowserControl::OpenImpl(SFXAnsiStringConstRef url, SFXAnsiStringConstRef method, SFXBufferConstRef data)
{
    WebOpt                              webopt[4];
    UIntN                               num(0);
    SFBSourceUtilSmp                    su;
    SFCError                            error(SFERR_NO_ERROR);

    if (url.StartsWith("http://") || url.StartsWith("https://")) {
        if (IsBusy()) {
            Stop();
        }
        if ((error = WebSetup(url)) == SFERR_NO_ERROR) {

            // set additonal http option
            if (!method.IsEmpty()) {
                _optMethod = method;
                webopt[num].nId = WEBOPT_METHOD;
                webopt[num].pVal = _optMethod.GetBuffer();
                ++num;
            }
            if (data.GetSize() != 0) {
                if ((_optBodyMem = MemoryAllocate(data.GetSize())) != null) {
                    SFXHelper::memcpy(_optBodyMem, data.GetBuffer(), data.GetSize());
                    _optBody.Release();
                    if ((su = SFBSourceUtil::NewInstance(&error)) != null) {
                        su->PeekFromMemory(_optBodyMem, data.GetSize(), null, null, &_optBody);
                    }
                    // *** vice versa *** //
                    if (_optBody != null) {
                        webopt[num].nId = WEBOPT_BODY;
                        webopt[num].pVal = VoidPtr(&_optBody);
                        ++num;
                    }
                    else {
                        error = SFERR_FAILED;
                    }
                }
                else {
                    error = SFERR_NO_MEMORY;
                }
            }
            if (error == SFERR_NO_ERROR) {
                webopt[num].nId = WEBOPT_END;
                ASSERT(num < lengthof(webopt) - 1);
                _webCallback.Set(WebCallback, this);
                _history[GetCurrentHistoryIndex()].url = url;
                _web->GetResponseV(&_webResp, &_webCallback, _history[GetCurrentHistoryIndex()].url, webopt);
            }
        }
    }
    else {
        error = OpenFileImpl(url);
    }
    return error;
}// SFZWebBrowserControl::OpenImpl //

/*private */SFCError SFZWebBrowserControl::OpenFileImpl(SFXAnsiStringConstRef url)
{
    static ACharConst                   fileScheme[] = "file://localhost/";
    static ACharConst                   resScheme[] = "res:";
    SFXAnsiString                       path;
    SFBFileMgrSmp                       mgr;
    SFBAStreamSmp                       file;
    SFCError                            error(SFERR_NO_ERROR);

    if (url.StartsWith(fileScheme)) {
        path = url.Substring(STRLEN(fileScheme), url.GetLength());
    }
    else if (url.StartsWith(resScheme)) {
        path = url.Substring(STRLEN(resScheme), url.GetLength());
    }
    else {
        error = SFERR_INVALID_PARAM;
    }
    if (error == SFERR_NO_ERROR) {
        if ((mgr = SFBFileMgr::NewInstance(&error)) != null) {
            file = mgr->OpenFile(path, _OFM_READ);
            if (file != null) {
                if (IsBusy()) {
                    Stop();
                }
                if ((error = WebSetup(url)) == SFERR_NO_ERROR) {
                    _history[GetCurrentHistoryIndex()].url = url;
                    _viewer->SetURL(url);
                    _viewer->SetIWeb(_web);
                    _viewer->LoadStream(file);
                }
            }
            else {
                error = SFERR_INVALID_PARAM; // XXX or mgr->GetLastError();
            }
        }
    }
    return error;
}// SFZWebBrowserControl::OpenFileImpl //

/*private static*/Void SFZWebBrowserControl::WebCallback(VoidPtr p)
{
    SFZWebBrowserControlPtr             self(reinterpret_cast<SFZWebBrowserControlPtr>(p));
    WebRespInfo*                        info = self->_webResp->GetInfo();
    ResponseNotify                      response(self->_viewer.Get(), info->nCode);
    SFBSourceSmp                        source(interface_cast(info->pisMessage));

    if (!self->ResponseNotifyHandler(response)) {
        self->_webCode = info->nCode;
        if (self->_webCode >= 0) {
            self->_viewer->SetIWeb(self->_web);
            self->_viewer->SetURL(self->_history[self->GetCurrentHistoryIndex()].url);
            self->_viewer->LoadSource(source);
            self->ClearWebRespAndOpts();
        }
        else {
            DoneNotify notify(self->_viewer.Get(), info->nCode);
            NotifyHandler(self, &notify);
        }
    }
}// SFZWebBrowserControl::WebCallback //

/*private */Void SFZWebBrowserControl::ClearWebRespAndOpts(Void)
{
    _webResp.Release();
    _optMethod = SFXAnsiString::EmptyInstance();
    _optBody.Release();
    if (_optBodyMem != null) {
        MemoryFree(_optBodyMem);
    }
    _optBodyMem = null;
    _optSsl.Release();
}

参照

SFZWebBrowserControl::Load | SFZWebBrowserControl::DoneNotifyHandler


SFZWebBrowserControl::Next
指定された値だけ履歴を進み、ページを再取得しレンダリングします。
[ public ]
SFCError Next(
    SInt32 n = 1   // 履歴を進む数
);

引数

n

履歴をいくつ進むかを指定します。 省略時は履歴を 1 つ進みます。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY
  • n 引数に指定した値だけ進んだ位置に履歴が存在しないとき: SFERR_INVALID_PARAM
  • 失敗したとき: SFERR_FAILED

解説

この関数は、指定された値だけ履歴を進み、ページを再取得しレンダリングします。

[Note] 注意

引数に負の値を指定すると、絶対値の数だけ履歴を戻ります。

指定された数が履歴リストから外れる場合はエラーとなり、 戻り値として SFERR_INVALID_PARAM を返します。

[Important] 通信に関するエラー

通信に関するエラーは戻り値では取得できません。

レンダリングの終了や、通信に関するエラーを取得する場合は、 SFZWebBrowserControl クラスを継承して、 SFZWebBrowserControl::DoneNotifyHandler 関数をオーバロードするクラスを作成する必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::Next(SInt32 n)
{
    SFCError                            error(SFERR_NO_ERROR);

    if (GetCurrentValue() - n >= 0 && GetCurrentValue() - n < GetMaximumValue()) {
        error = Move(static_cast<UInt32>(GetCurrentValue() - n));
    }
    else {
        error = SFERR_INVALID_PARAM;
    }
    return error;
}// SFZWebBrowserControl::Next //

参照

SFZWebBrowserControl::Previous | SFZWebBrowserControl::Navigate | SFZWebBrowserControl::Move | SFZWebBrowserControl::Reload | SFZWebBrowserControl::DoneNotifyHandler


SFZWebBrowserControl::Previous
指定された値だけ履歴を戻り、ページを再取得しレンダリングします。
[ public ]
SFCError Previous(
    SInt32 n = 1   // 履歴を戻る数
);

引数

n

履歴をいくつ戻るかを指定します。 省略時は履歴を 1 つ戻ります。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY
  • n 引数に指定した値だけ戻った位置に履歴が存在しないとき: SFERR_INVALID_PARAM
  • 失敗したとき: SFERR_FAILED

解説

この関数は、指定された値だけ履歴を戻り、ページを再取得しレンダリングします。

[Note] 注意

引数に負の値を指定すると、絶対値の数だけ履歴を進みます。

指定された数が履歴リストから外れる場合はエラーとなり、 戻り値として SFERR_INVALID_PARAM を返します。

[Important] 通信に関するエラー

通信に関するエラーは戻り値では取得できません。

レンダリングの終了や、通信に関するエラーを取得する場合は、 SFZWebBrowserControl クラスを継承して、 SFZWebBrowserControl::DoneNotifyHandler 関数をオーバロードするクラスを作成する必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::Previous(SInt32 n)
{
    return Next(-n);
}// SFZWebBrowserControl::Previous //

参照

SFZWebBrowserControl::Next | SFZWebBrowserControl::Navigate | SFZWebBrowserControl::Move | SFZWebBrowserControl::Reload | SFZWebBrowserControl::DoneNotifyHandler


SFZWebBrowserControl::Reload
現在表示しているページを再取得して再描画します。
[ public ]
Void Reload(Void);

解説

この関数は、現在表示しているページを再取得して再描画します。

[Caution] 注意

現在表示しているページが、 SFZWebBrowserControl::Load 関数か、 IAStream、ISource を引数にした SFZWebBrowserControl::Navigate 関数によるものである場合、 引数の url が適切に設定されていないと再描画に失敗します。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFZWebBrowserControl::Reload(Void)
{
    Move(GetCurrentHistoryIndex());
}// SFZWebBrowserControl::Reload //

参照

SFZWebBrowserControl::GetCurrentHistoryIndex | SFZWebBrowserControl::Move | SFZWebBrowserControl::Load | SFZWebBrowserControl::Navigate


SFZWebBrowserControl::ResponseNotifyHandler
[ハンドラ] サーバーへの接続が完了し、レンダリングが始まる前に呼び出されるハンドラです。
[ protected, virtual ]
Bool ResponseNotifyHandler(
    ResponseNotifyConstRef notify   // 通知情報
);

引数

notify

HTTP のレスポンスコード、 BREW のエラーコードが通知されます。

戻り値

  • HTML のレンダリングをせずに処理を終えたいとき: true
  • 続けて HTML のレンダリングに入りたいとき: false

解説

この関数は、サーバーへの接続が完了し、レンダリングが始まる前に呼び出されるハンドラです。

デフォルトの実装以外の処理(タイムアウトなどのエラー処理)を行いたい場合は、 この関数をオーバーライドします。

デフォルトの実装は、何も行いません。

[Note] 注意

SFZWebBrowserControl::DoneNotifyHandler とは 呼び出されるタイミングが違います。

使用例

以下は、オーバーロードしてエラー処理を行うコードです。

#include <SFZResponder/SFZControl/SFZWebBrowserControl.hpp>

SFMTYPEDEFRESPONDER(MyBrowserControl)
class MyBrowserControl : public SFZWebBrowserControl {
    SFBSEALRESPONDER(MyBrowserControl)
    SFMRESPONDERINSTANTIATEFOUR(MyBrowserControl, SFZWebBrowserControl, SFYControl, SFYWidget, SFYResponder)
public:
    static MyBrowserControlSmp NewInstance(SFCErrorPtr exception = null);
protected:
    explicit MyBrowserControl(Void) static_throws;
    virtual ~MyBrowserControl(Void);
    virtual Void ResponseNotifyHandler(ResponseNotifyConstRef notify) {
        if (notify.GetErrorCode() != SFERR_NO_ERROR) {
            // 通信エラーならエラーダイアログを表示し、HTML をレンダリングしない 
            ErrorDialog(notify.GetErrorCode());
            return true;
        }
        else if (WEB_SUCCEEDED(notify.GetDoneCode())) {
            // HTTP エラーなら警告ダイアログを表示する 
            WarningDialog(notify.GetResposenCode());
        }
        return false;  // 正常、警告ならば HTML をレンダリングする 
    }
};

内部実装

この関数の内部実装は以下の通りです。

/*protected virtual */Bool SFZWebBrowserControl::ResponseNotifyHandler(ResponseNotifyConstRef notify)
{
    unused(notify);
    return false;
}// SFZWebBrowserControl::ResponseNotifyHandler //

参照

SFZWebBrowserControl::ResponseNotify | SFZWebBrowserControl::DoneNotifyHandler | SFZWebBrowserControl::FocusNotifyHandler | SFZWebBrowserControl::JumpNotifyHandler


SFZWebBrowserControl::SetAuthorizeData
HTTP ベーシック認証の情報を設定します。
[ public ]
SFCError SetAuthorizeData(
    SFXAnsiStringConstRef user     // ユーザー名
    SFXAnsiStringConstRef passwd   // パスワード
    SFXAnsiStringConstRef url      // HTTP ベーシック認証の開始 URL
);

引数

user

ユーザー名を指定します。

passwd

パスワードを指定します。

url

URL を指定します。 この URL から始まるページが、認証の対象となります。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY

解説

この関数は、HTTP ベーシック認証の情報を設定します。

この関数を実行した後、 url 引数に指定した URL で始まるページへのアクセスは、 指定された認証情報を持つヘッダーをつけて行われます。

認証情報の設定を解除する時は、 SFZWebBrowserControl::UnsetAuthorizeData 関数を呼び出します。

また、 url 引数に指定した URL で始まらないページをアクセスした場合、 認証情報の設定は自動的に解除されます。

[Note] 注意

戻り値が SFERR_NO_ERROR 以外の場合は、ベーシック認証は行われません。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::SetAuthorizedData(SFXAnsiStringConstRef user, SFXAnsiStringConstRef passwd, SFXAnsiStringConstRef url)
{
    SFCError                            error(SFERR_NO_ERROR);

    RemoveHeader(_authHeader);
    _authHeader.Clear();
    if (!user.IsEmpty()) {
        _authBaseUrl = url;
        MakeAuthHeader((user + ":" + passwd).GetCString(), user.GetLength() + passwd.GetLength() + 1);
        if (_authHeader.IsEmpty()) {
            error = SFERR_NO_MEMORY;
        }
    }
    else {
        _authBaseUrl = SFXAnsiString::EmptyInstance();
        error = SFERR_NO_ERROR;
    }
    return error;
}// SFZWebBrowserControl::SetAuthorizedData //

/*private */Void SFZWebBrowserControl::RemoveHeader(SFXAnsiStringConstRef header)
{
    WebOpt                              webopt;
    SInt32                              n;

    for (n = 0; _web->GetOpt(WEBOPT_HEADER, n, &webopt) == SFERR_NO_ERROR; ++n) {
        if (header.Compare(static_cast<ACharConstPtr>(webopt.pVal)) == 0) {
            _web->RemoveOpt(WEBOPT_HEADER, n);
            break;
        }
    }
}// SFZWebBrowserControl::RemoveHeader //

/*private */Void SFZWebBrowserControl::MakeAuthHeader(SFXAnsiStringConstRef auth, UIntN len)
{
    SFXAnsiString                       base64;
    SFBWebUtilSmp                       webUtil;
    SFCError                            error;

    base64 = "";
    base64.SetThreshold(BASE64LEN(len) + 1);
    if ((webUtil = SFBWebUtil::NewInstance(&error)) != null) {
        webUtil->EncodeBase64(auth.GetCString(), len, base64.GetBuffer());
        base64.SetChar(BASE64LEN(len), '\0');
    }
    _authHeader = SFXAnsiString::Format("Authorization: Basic %s\r\n", base64.GetCString());
    return;
}// SFZWebBrowserControl::MakeAuthHeader //

参照

SFZWebBrowserControl::UnsetAuthorizeData


SFZWebBrowserControl::SetHistorySize
履歴リストのサイズを設定します。
[ public ]
SFCError SetHistorySize(
    UInt32 size   // 設定する値
);

引数

size

新しい履歴リストのサイズを指定します。 0 や、現在の履歴番号より小さい値を指定できません。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY
  • 引数が 0、もしくは現在表示中の履歴よりも小さい値のとき: SFERR_INVALID_PARAM

解説

この関数は、履歴リストのサイズを設定します。

デフォルト値: SFZWebBrowserControl::HISTORY_SIZE(30)

戻り値が SFERR_NO_ERROR でない場合、履歴リストのサイズは変更されません。

[Note] 注意

現在より小さい値を設定した場合、 履歴のサイズが指定されたサイズに収まるまで古い履歴情報が捨てられます。

SFZWebBrowserControl::GetCurrentHistoryIndex 関数で取得できる、現在表示しているページの履歴番号よりも小さな値を設定することはできません。

参照

SFZWebBrowserControl::GetCurrentHistoryIndex | SFZWebBrowserControl::GetHistory | SFZWebBrowserControl::GetHistoryList | SFZWebBrowserControl::Move | SFZWebBrowserControl::DEFAULT


SFZWebBrowserControl::SetIndent
インデントの幅を設定します。[単位: ピクセル]
[ public ]
SFCError SetIndent(
    SInt32 pixel   // 設定する値
);

引数

pixel

インデントの幅を指定します。[単位: ピクセル]

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 内部で呼び出す BREW API IHTMLVIEWER_SetOption 関数の引数に指定したオプション ID がサポートされていないとき: SFERR_UNSUPPORTED

解説

この関数は、HTML 表示のインデントの幅を設定します。[単位: ピクセル]

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_N_INDENT" を指定して BREW API IHTMLVIEWER_SetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::SetIndent(SInt32 pixel)
{
    SFCError                            error(SFERR_NO_ERROR);

    RenderSafe();
    error = _viewer->SetOption(HVOPT_N_INDENT, (HVOpt)pixel);
    Invalidate();
    return error;
}// SFZWebBrowserControl::SetIndent //


/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::GetIndent | SFBHTMLViewer::SetOption | BREW API IHTMLVIEWER_SetOption


SFZWebBrowserControl::SetInlineEditEnable
フォームでの文字入力をインラインするかを設定します。
[ public ]
Void SetInlineEditEnable(
    Bool enable   // 設定する値: インラインの場合は true、フルスクリーンの場合は false
);

引数

enable

フォームでの文字入力方法を指定します。

  • インラインの場合: true
  • フルスクリーンの場合: false

解説

この関数は、HTML 表示の文字入力をインラインにするか、フルスクリーンにするかを設定します。

[Note] 注意

この関数は、内部で BREW API IHTMLVIEWER_SetProperties 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFZWebBrowserControl::SetInlineEditEnable(Bool enable)
{
    UInt32                              property;

    property = _viewer->GetProperties();
    if (enable) {
        property |= HVP_INLINE_EDIT;
    }
    else {
        property &= ~HVP_INLINE_EDIT;
    }
    RenderSafe();
    _viewer->SetProperties(property);
    Invalidate();
    return;
}// SFZWebBrowserControl::SetInlineEditEnable //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::IsInlineEditEnable | SFBControl::SetProperties | BREW API IHTMLVIEWER_SetProperties


SFZWebBrowserControl::SetLinkColor
リンク文字列の表示色を設定します。
[ public ]
SFCError SetLinkColor(
    SFXRGBColorConstRef color   // リンク色
);

引数

color

リンク文字列の表示色を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 内部で呼び出す BREW API IHTMLVIEWER_SetOption 関数の引数に指定したオプション ID がサポートされていないとき: SFERR_UNSUPPORTED

解説

この関数は、HTML 表示のリンク文字列の表示色を設定します。

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_RGB_LINK" を指定して BREW API IHTMLVIEWER_SetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::SetLinkColor(SFXRGBColorConstRef color)
{
    SFCError                            error(SFERR_NO_ERROR);

    RenderSafe();
    error = _viewer->SetOption(HVOPT_RGB_LINK, HVOpt(color.AsRGBVAL()));
    Invalidate();
    return error;
}// SFZWebBrowserControl::SetLinkColor //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::GetLinkColor | SFZWebBrowserControl::SetTextColor | SFBHTMLViewer::SetOption | BREW API IHTMLVIEWER_SetOption


SFZWebBrowserControl::SetParagraphSpacing
段落間の行間の長さを設定します。[単位: ピクセル]
[ public ]
SFCError SetParagraphSpacing(
    SInt32 pixel   // 設定する値
);

引数

pixel

段落間の行間の長さを指定します。[単位: ピクセル]

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 内部で呼び出す BREW API IHTMLVIEWER_SetOption 関数の引数に指定したオプション ID がサポートされていないとき: SFERR_UNSUPPORTED

解説

この関数は、HTML 表示の段落間の行間の長さを設定します。[単位: ピクセル]

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_N_VSPACE" を指定して BREW API IHTMLVIEWER_SetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::SetParagraphSpacing(SInt32 pixel)
{
    SFCError                            error(SFERR_NO_ERROR);

    RenderSafe();
    error = _viewer->SetOption(HVOPT_N_VSPACE, (HVOpt)pixel);
    Invalidate();
    return error;
}// SFZWebBrowserControl::SetParagraphSpacing //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::GetParagraphSpacing | SFBHTMLViewer::SetOption | BREW API IHTMLVIEWER_SetOption


SFZWebBrowserControl::SetScrollbarEnable
スクロールバーの有無を設定します。
[ public ]
Void SetScrollbarEnable(
    Bool enable   // 設定する値: スクロールバー有りの場合は true、無しの場合は false
);

引数

enable

スクロールバーの有無を指定します。

  • スクロールバー有りの場合: true
  • スクロールバー無しの場合: false

解説

この関数は、スクロールバーの有無を設定します。

[Note] 注意

この設定で表示されるスクロールバーは、 SophiaFramework UNIVERSE で実装されているものではなく、 BREW API IHtmlViewer インターフェースのスクロールバーです。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFZWebBrowserControl::SetScrollbarEnable(Bool enable)
{
    UInt32                              property;

    property = _viewer->GetProperties();
    if (enable) {
        property |= HVP_SCROLLBAR;
    }
    else {
        property &= ~HVP_SCROLLBAR;
    }
    RenderSafe();
    _viewer->SetProperties(property);
    Invalidate();
    return;
}// SFZWebBrowserControl::SetScrollbarEnable //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::IsScrollbarEnable | SFBControl::SetProperties | BREW API IHTMLVIEWER_SetProperties


SFZWebBrowserControl::SetScrollbarWidth
スクロールバーの幅を設定します。[単位: ピクセル]
[ public ]
SFCError SetScrollbarWidth(
    SInt32 pixel   // 設定する値
);

引数

pixel

スクロールバーの幅を指定します。[単位: ピクセル]

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 内部で呼び出す BREW API IHTMLVIEWER_SetOption 関数の引数に指定したオプション ID がサポートされていないとき: SFERR_UNSUPPORTED

解説

この関数は、HTML 表示のスクロールバーの幅を設定します。[単位: ピクセル]

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_N_SBWIDTH" を指定して BREW API IHTMLVIEWER_SetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::SetScrollbarWidth(SInt32 pixel)
{
    SFCError                            error(SFERR_NO_ERROR);

    RenderSafe();
    error = _viewer->SetOption(HVOPT_N_SBWIDTH, (HVOpt)pixel);
    Invalidate();
    return error;
}// SFZWebBrowserControl::SetScrollbarWidth //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::GetScrollbarWidth | SFBHTMLViewer::SetOption | BREW API IHTMLVIEWER_SetOption


SFZWebBrowserControl::SetTextColor
テキストの表示色を設定します。
[ public ]
SFCError SetTextColor(
    SFXRGBColorConstRef color   // 設定する値
);

引数

color

テキストの表示色を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 内部で呼び出す BREW API IHTMLVIEWER_SetOption 関数の引数に指定したオプション ID がサポートされていないとき: SFERR_UNSUPPORTED

解説

この関数は、HTML 表示のテキストの表示色を設定します。

[Note] 注意

この関数は、内部で引数のオプション ID に "HVOPT_RGB_TEXT" を指定して BREW API IHTMLVIEWER_SetOption 関数を呼び出します。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::SetTextColor(SFXRGBColorConstRef color)
{
    SFCError                            error(SFERR_NO_ERROR);

    RenderSafe();
    error = _viewer->SetOption(HVOPT_RGB_TEXT, HVOpt(color.AsRGBVAL()));
    Invalidate();
    return error;
}// SFZWebBrowserControl::SetTextColor //

/*private */Void SFZWebBrowserControl::RenderSafe(Void)
{
    SFXGraphics::GetInstance()->SetClip(SFXRectangle::EmptyInstance());
}// SFZWebBrowserControl::RenderSafe //

参照

SFZWebBrowserControl::GetTextColor | SFZWebBrowserControl::SetLinkColor | SFBHTMLViewer::SetOption | BREW API IHTMLVIEWER_SetOption


SFZWebBrowserControl::SetWeb
HTTP 通信でサーバーにアクセスするときに使用される IWeb インターフェースを設定します。
[ public ]
Void SetWeb(
    SFBWebSmpConstRef web   // IWeb インターフェース
);

引数

web

通信に使う IWeb インターフェースです。

解説

この関数は、 HTTP 通信でサーバーにアクセスするときに使用される BREW API IWeb インターフェースを設定します。

ネットワークアクセス中、あるいはレンダリング中の場合、それらの処理は中断されます。

この関数で設定した値は、 SFZWebBrowserControl::GetWeb 関数で取得できます。

[Important] WebOpt 指定時の注意

他の用途で利用するまでは、 BREW API IWeb インターフェースに設定した BREW API WebOpt データを保持する必要があります。

詳しくは、BREW API リファレンス( BREW API IWeb) の「 WEBOPT の寿命に関する注意事項 」を参照してください。

[Important] サスペンド時の振る舞い

サスペンドしたとき、 BREW API WebOpt の情報はリセットされ IWeb インターフェースを内部で作成する設定(デフォルト状態)に戻ります。

サスペンド前の BREW API IWeb インターフェースを使うには、 レジューム時に BREW API WebOpt データを再設定する必要があります。

使用例

以下は、HTTP リクエストヘッダーを設定するコードと、 タイムアウトを設定するコードです。

[Note] 注意

端末がサスペンドすると設定が無効になるので、 レジュームハンドラ内で設定し直す必要があります。

// HTTP リクエストヘッダーを設定するコード
// ※header: 設定が有効な間は解放してはならない。例えば、header には "User-Agent: ibROWSE/0.1 (SophiaFramework; I; BREW 4.0)\r\n" などを指定する。
SCError sample::SetHeader(SFXAnsiStringConstRef header, SFZWebBrowserControlRef browser) {
    SFBWebSmp web;
    SFCError error(SFERR_NO_ERROR);

    web = browser.GetWeb();
    if (web == null) {

        web = SFBWeb::NewInstance(&error);
    }
    if (error == SFERR_NO_ERROR) {

        WebOpt opts[2];
        opts[0].nId = WEB_HEADER;
        opts[0].pVal = const_cast<ACharPtr>(header.GetCString()); // 設定する文字列をヒープに確保する場合、設定が有効な間は解放してはならない
        opts[1].nId = WEBOPT_END;
        opts[1].pVal = null;  // "opts[1].pVal = null;" は省略可
        if ((error = web->AddOpt(opts)) == SFERR_NO_ERROR) {

            browser.SetWeb(web);            
        }
    }

    return error;
}
// タイムアウトを設定するコード
SCError sample::SetTimeOut(UInt32 time_out, SFZWebBrowserControlRef browser) {
    SFBWebSmp web;
    SFCError error(SFERR_NO_ERROR);

    web = browser.GetWeb();
    if (web == null) {

        web = SFBWeb::NewInstance(&error);
    }
    if (error == SFERR_NO_ERROR) {

        // SFBWeb にタイムアウトを設定する
        WebOpt opts[2];
        opts[0].nId = WEBOPT_CONNECTTIMEOUT;
        opts[0].pVal = reinterpret_cast<VoidPtr>(time_out); // 単位: ミリ秒
        opts[1].nId = WEBOPT_END;
        if ((error = web->AddOpt(opts)) == SFERR_NO_ERROR) {

            browser.SetWeb(web);            
        }
    }

    return error;
}

参照

SFZWebBrowserControl::UnsetWeb | SFZWebBrowserControl::GetWeb | SFBHTMLViewer | SFBWeb | SFBWebResp | SFBWebOpts | BREW API IHtmlViewer | BREW API IWeb | BREW API IWebResp | BREW API IWebOpts | BREW API WebOpt


SFZWebBrowserControl::Stop
通信やレンダリングを行っている場合、その処理を中断します。
[ public ]
Void Stop(Void);

解説

この関数は、通信やレンダリングを行っている場合、その処理を中断します。

[Note] 注意

ネットワークアクセス中、もしくはレンダリング中以外ならば何も行いません。 表示済みの部分に対しては、影響を与えません。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFZWebBrowserControl::Stop(Void)
{
    _webCallback.Cancel();
    _viewer->Stop();
    return;
}// SFZWebBrowserControl::Stop //

参照

SFZWebBrowserControl::~SFZWebBrowserControl


SFZWebBrowserControl::UnsetAuthorizeData
HTTP ベーシック認証の設定を解除します。
[ public ]
SFCError UnsetAuthorizeData(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY

解説

この関数は、 SFZWebBrowserControl::SetAuthorizeData 関数による HTTP ベーシック認証の設定を解除します。

[Note] 注意

この関数を実行した後は、 HTTP リクエストには認証情報のヘッダーは付きません。

内部実装

この関数の内部実装は以下の通りです。

/*public */SFCError SFZWebBrowserControl::UnsetAuthorizedData(Void)
{
    return SetAuthorizedData(NULL_STR, NULL_STR, NULL_STR);
}// SFZWebBrowserControl::UnsetAuthorizedData //

参照

SFZWebBrowserControl::SetAuthorizeData


SFZWebBrowserControl::UnsetWeb
SetWeb 関数による IWeb インターフェースの設定を解除します。
[ public ]
Void UnsetWeb(Void);

解説

この関数は、 SFZWebBrowserControl::SetWeb 関数による BREW API IWeb インターフェースの設定を解除します。

この関数を実行すると、 通信に必要な BREW API IWeb インターフェースはコントロール内部で作成されます。

現在通信中、もしくはレンダリング中の場合は、それらの処理は中断されます。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFZWebBrowserControl::UnsetWeb(Void)
{
    Stop();
    ClearWebRespAndOpts();
    _web.Release();
}// SFZWebBrowserControl::UnsetWeb //


/*private */Void SFZWebBrowserControl::ClearWebRespAndOpts(Void)
{
    _webResp.Release();
    _optMethod = SFXAnsiString::EmptyInstance();
    _optBody.Release();
    if (_optBodyMem != null) {
        MemoryFree(_optBodyMem);
    }
    _optBodyMem = null;
    _optSsl.Release();
}

参照

SFZWebBrowserControl::SetWeb | SFZWebBrowserControl::GetWeb | SFZWebBrowserControl::Stop | SFBWeb | BREW API IWeb


SFZWebBrowserControl::CodeEnum
SFZWebBrowserControl クラスを表す定数です。
enum CodeEnum {
    CODE_TYPE = four_char_code('c', 'h', 't', 'm')
};
SFMTYPEDEFTYPE(CodeEnum)

参照

SFYResponder::GetType | SFYResponder::SetType


SFZWebBrowserControl::DEFAULT
パラメータの初期値に関する列挙型です。
enum DEFAULT {
    HISTORY_SIZE = 30  // 履歴リストの大きさのデフォルト値
};

解説

履歴リストの大きさのデフォルト値を示す HISTORY_SIZE のみ定義されています。

参照

SFZWebBrowserControl::SetHistorySize


SFZWebBrowserControl::DoneNotify
レンダリング終了時の情報を保持するクラスです。
[ public ]

SFMTYPEDEFCLASS(DoneNotify)
class DoneNotify : public Notify {
public:
                       DoneNotify     (SFBHTMLViewerPtr hv, int done_code);
    SInt32             GetDoneCode    (Void) const;
    SFCError           GetErrorCode   (Void) const;
    UInt32             GetResponseCode(Void) const;
};

SFMTYPEDEFCLASS(Notify)
class Notify : public HViewNotify {
public:
    HVNotifyCode       GetType        (Void) const;
    SFBHTMLViewerPtr   GetHTMLViewer  (Void) const;
protected:
                       Notify         (SFBHTMLViewerPtr hv, HVNotifyCode notify = HVN_NONE);
};

// HViewNotify:  notification data
//
typedef struct {
   HVNotifyCode   code;        // notification code
   IHtmlViewer *  phv;         // identifies IHtmlViewer that sent the notification

   union {
      HViewJump   jump;        // HVN_JUMP
      HViewJump   submit;      // HVN_SUBMIT
      int         nDone;       // HVN_DONE
      HViewFocus  focus;       // HVN_FOCUS
   } u;
} HViewNotify;

#ifdef _WIN32
typedef unsigned HVNotifyCode;
#else
typedef int8 HVNotifyCode;
#endif

解説

この型は、 BREW API HViewNotify から派生しています。

SFZWebBrowserControl::DoneNotifyHandler 関数の引数として渡されるデータの型です。

DoneNotify クラスは以下のメンバ関数から構成されます。

GetDoneCode 関数 通信 / レンダリングの終了コードを取得します。 戻り値を BREW API WEB_ERROR_SUCCEEDED 関数に渡すと通信の成否が判定できます。 成功した場合は、サーバーの HTTP ステータスコード、失敗した場合は、負の値になります。 また、戻り値は BREW API WEB_ERROR_MAP 関数に渡すと BREW のエラーコードに変換されます。
GetErrorCode 関数 通信 / レンダリング時のエラーコードを取得します。 エラーがない場合は SFERR_NO_ERROR が返却されます。
GetResponseCode 関数 サーバーの HTTP ステータスコードを取得します。 通信エラーなどで HTTP セッションが失敗している場合は 0 が返却されます。

参照

SFZWebBrowserControl::DoneNotifyHandler | BREW API HViewNotify | BREW API WEB_ERROR_SUCCEEDED | BREW API WEB_ERROR_MAP


SFZWebBrowserControl::FocusNotify
ブラウザのフォーカス移動情報を保持するクラスです。
[ public ]

SFMTYPEDEFCLASS(FocusNotify)
class FocusNotify : public Notify {
public:
                       FocusNotify  (SFBHTMLViewerPtr hv, SInt32 elementNo, HVFocusType type, SInt32 state);
    SInt32             GetElementNo(Void) const;
    HVFocusType        GetFocusType(Void) const;
    SInt32             GetState    (Void) const;
};


SFMTYPEDEFCLASS(Notify)
class Notify : public HViewNotify {
public:
    HVNotifyCode       GetType        (Void) const;
    SFBHTMLViewerPtr   GetHTMLViewer  (Void) const;
protected:
                       Notify         (SFBHTMLViewerPtr hv, HVNotifyCode notify = HVN_NONE);
};

// HViewNotify:  notification data
//
typedef struct {
   HVNotifyCode   code;        // notification code
   IHtmlViewer *  phv;         // identifies IHtmlViewer that sent the notification

   union {
      HViewJump   jump;        // HVN_JUMP
      HViewJump   submit;      // HVN_SUBMIT
      int         nDone;       // HVN_DONE
      HViewFocus  focus;       // HVN_FOCUS
   } u;
} HViewNotify;

#ifdef _WIN32
typedef unsigned HVNotifyCode;
#else
typedef int8 HVNotifyCode;
#endif

// HViewJump:  contains data for hypertext jumps and form submissions
//
typedef struct {
   int            posElem;     // FORM or A item that triggered submit
   const char *   pszURL;      // URL ("URI")
   const char *   pszMethod;   // HVN_SUBMIT:  "GET", "POST", etc.
   const char *   pszData;     // HVN_SUBMIT:  NULL for "GET"; form data otherwise.
} HViewJump;


typedef struct {
   int            posElem;     // -1 when no focus
   HVFocusType    nType;       // HVFOCUS_... type
   int            nState;      // state, dependent upon type.
} HViewFocus;

// Types of focus items
enum {
   HVFOCUS_NONE = 0              // no visible item
  ,HVFOCUS_LINK                  // <A HREF=...<
  ,HVFOCUS_EDIT                  // <INPUT TYPE={TEXT|PASSWORD}<or <TEXTAREA<
  ,HVFOCUS_CHECKBOX              // <INPUT TYPE=CHECKBOX< : state = 1/0 for checked/unchecked
  ,HVFOCUS_RADIO                 // <INPUT TYPE=RADIO< : state = 1/0 for selected/unselected
  ,HVFOCUS_SUBMIT                // <INPUT TYPE=SUBMIT<
  ,HVFOCUS_RESET                 // <INPUT TYPE=RESET<
  ,HVFOCUS_LIST                  // <SELECT<
};
#ifdef _WIN32
typedef unsigned HVFocusType;
#else
typedef int8 HVFocusType;
#endif

解説

この型は、 BREW API HViewNotify から派生しています。

SFZWebBrowserControl::FocusNotifyHandler 関数の引数として渡されるデータの型です。

FocusNotify クラスは、以下のメンバ関数から構成されます。

GetState 関数 フォーカスされている要素の状態を取得します。 取得した値は、 GetFocusType 関数の戻り値が HVFOCUS_CHECKBOX または HVFOCUS_RADIO であるときだけ有効です。 フォーカスされているチェックボックスあるいはラジオボタンが選択されている時は 0 以外の値、されていない時は 0 を返します。
GetElementNo 関数 フォーカスされているエレメントの位置を取得します。 戻り値の位置は SFZWebBrowserControl::FindElement 関数の戻り値と同じです。
GetFocusType 関数 フォーカスされている要素の種類を取得します。 戻り値は、以下のいずれかです。
  • HVFOCUS_NONE
  • HVFOCUS_LINK
  • HVFOCUS_EDIT
  • HVFOCUS_CHECKBOX
  • HVFOCUS_RADIO
  • HVFOCUS_SUBMIT
  • HVFOCUS_RESET
  • HVFOCUS_LIST
詳細情報: BREW API HVFocusType

参照

SFZWebBrowserControl::FocusNotifyHandler | SFZWebBrowserControl::FindElement | BREW API HViewNotify


SFZWebBrowserControl::HistoryEntry
履歴内容を表す構造体です。
[ public ]
struct HistoryEntry {
    SFXAnsiString url;    // URL
    SFXAnsiString title;  // タイトル
};

解説

この型は、履歴内容(URL とタイトル)を表す構造体です。

参照

SFZWebBrowserControl::GetHistory | SFZWebBrowserControl::GetHistoryList


SFZWebBrowserControl::JumpNotify
ブラウザで押されたリンクの情報を保持するためのクラスです。
[ public ]

SFMTYPEDEFCLASS(JumpNotify)
class JumpNotify : public Notify {
public:
                       JumpNotify  (SFBHTMLViewerPtr hv, SInt32 elementNo, ACharConstPtr url, ACharConstPtr method = null, ACharConstPtr data = null);
                       JumpNotify  (SFBHTMLViewerPtr hv, ACharConstPtr url, ACharConstPtr method = null, ACharConstPtr data = null);
    SInt32             GetElementNo(Void) const;
    SFXAnsiStringConst GetUrl      (Void) const;
    SFXAnsiStringConst GetMethod   (Void) const;
    SFXAnsiStringConst GetData     (Void) const;
};

SFMTYPEDEFCLASS(Notify)
class Notify : public HViewNotify {
public:
    HVNotifyCode       GetType        (Void) const;
    SFBHTMLViewerPtr   GetHTMLViewer  (Void) const;
protected:
                       Notify         (SFBHTMLViewerPtr hv, HVNotifyCode notify = HVN_NONE);
};

// HViewNotify:  notification data
//
typedef struct {
   HVNotifyCode   code;        // notification code
   IHtmlViewer *  phv;         // identifies IHtmlViewer that sent the notification

   union {
      HViewJump   jump;        // HVN_JUMP
      HViewJump   submit;      // HVN_SUBMIT
      int         nDone;       // HVN_DONE
      HViewFocus  focus;       // HVN_FOCUS
   } u;
} HViewNotify;

#ifdef _WIN32
typedef unsigned HVNotifyCode;
#else
typedef int8 HVNotifyCode;
#endif

解説

この型は、 BREW API HViewNotify から派生しています。

SFZWebBrowserControl::JumpNotifyHandler 関数の引数として渡されるデータの型です。

JumpNotify クラスは、以下のメンバ関数から構成されます。

GetElementNo リンクとして選ばれた要素の位置を取得します。 この位置は、 SFZWebBrowserControl::FindElement 関数の戻り値と同じです。
GetUrl 関数 選択されたリンクの URL を取得します。
GetMethod 関数 選択されたリンクのサーバーへのアクセスメソッドを取得します ("GET" と "POST" がサポートされています)。
GetData 関数 POST メソッドでサーバーへ送信するデータを取得します。 送信データがない、あるいは POST メソッドでない場合、空文字列を返します。

参照

SFZWebBrowserControl::JumpNotifyHandler | SFZWebBrowserControl::FindElement | BREW API HViewNotify |


SFZWebBrowserControl::ResponseNotify
サーバーへの接続が完了し、レンダリングが始まる前の情報を保持するクラスです。
[ public ]

SFMTYPEDEFCLASS(ResponseNotify)
class ResponseNotify : public Notify {
public:
                       ResponseNotify (SFBHTMLViewerPtr hv, int error_code);
    SFCError           GetErrorCode   (Void) const;
    UInt32             GetResponseCode(Void) const;
};

SFMTYPEDEFCLASS(Notify)
class Notify : public HViewNotify {
public:
    HVNotifyCode       GetType        (Void) const;
    SFBHTMLViewerPtr   GetHTMLViewer  (Void) const;
protected:
                       Notify         (SFBHTMLViewerPtr hv, HVNotifyCode notify = HVN_NONE);
};

// HViewNotify:  notification data
//
typedef struct {
   HVNotifyCode   code;        // notification code
   IHtmlViewer *  phv;         // identifies IHtmlViewer that sent the notification

   union {
      HViewJump   jump;        // HVN_JUMP
      HViewJump   submit;      // HVN_SUBMIT
      int         nDone;       // HVN_DONE
      HViewFocus  focus;       // HVN_FOCUS
   } u;
} HViewNotify;

#ifdef _WIN32
typedef unsigned HVNotifyCode;
#else
typedef int8 HVNotifyCode;
#endif

解説

この型は、 BREW API HViewNotify から派生しています。

SFZWebBrowserControl::ResponseNotifyHandler 関数の引数として渡されるデータの型です。

ResponseNotify クラスは、以下のメンバ関数から構成されます。

GetErrorCode 関数 通信 / レンダリング時のエラーコードを取得します。 エラーがない場合は SFERR_NO_ERROR が返却されます。
GetResponseCode 関数 サーバーの HTTP ステータスコードを取得します。 通信エラーなどで HTTP セッションが失敗している場合は 0 が返却されます。

参照

SFZWebBrowserControl::ResponseNotifyHandler | BREW API HViewNotify