熊「コディアックヒグマが見れるページに遷移」


好きなページに遷移する

今回はメニューのアクションを選択した時に、
指定したページにブラウザが遷移するなんてことをやってみます

ツールバーらしい動きですね
とりあえず今回のコードを実行すると、メニューの1個目の要素を選択すると
クマのwikiページに移動するように実装します

キャプチャ


熊「写真、シロクマじゃねーんだな」


Navigateを使う

ブラウザの遷移をするのは、IWebBrowser2Navigateを使います
Navigate2というのもあるけど、これはActiveX用とかってどこかに書いてあった気がする

Navigateの引数は、こんな感じです
・BSTR url
    URL文字列
    ここで指定したページに遷移する
・VARIANT *Flags
    なんかいろいろフラグがある
    navOpenInNewWindow : Windowを開く
    navNoReadFromCache : キャッシュ使わない
    navNoHistory : 履歴に残さない
    navAllowAutosearch : 遷移失敗時に勝手にdefaultのdomainを付加する(.comとか.co.jpとか)
    navOpenInNewTab : 新しいタブで開く(もちろんIE7以降)
・VARIANT *TargetFrameName
    Javascriptで開く時に指定するのと似たようなの
    _blank、_parent、_self、_top、windowname
    それぞれの意味は・・・・察してください
・VARIANT *PostData
    名前の通り、POST用データ
    詳しい説明は次節で
・VARIANT *Headers
    ヘッダも設定できる
    IEのデフォルトヘッダに追加する形?

ようわからんですが、とりあえず、わらわら使ってみましょう、今から


普通の遷移

IWebBrowserはCOMさんです
COMさんは、VBからでもJavascriptからでも呼べるので、
型は基本、Variantチックなものになっています

で、URLにはconst charとかではなく、BSTRとかいう代物を使わなければいけなくなってます
このBSTR、使ったら必ず解放とか言う割と面倒なものなので、
ATLが用意しているもう少し安全な、CComBSTRを使います
初めてご使用される方は、注意点とか書いてあったので、こちらをご覧ください

http://msdn.microsoft.com/ja-jp/library/bdyd6xz6(VS.80).aspx

リンク切れ起こしませんようにと祈ってから遷移してください

熊「MSDNの説明、わかりづらいー」

この説明はかなりマシな方ではないかと


引数にURLだけ指定した場合のソース

とりあえず、最低限の指定だけしたコードはこんな感じです
CComBSTR url ( L"http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%9E" );
CComVariant vEmpty;
m_spBrowser->Navigate ( url, &vEmpty, &vEmpty, &vEmpty, &vEmpty );


メニューにつけた時のソースがこんな風
ToolbarWindow.cpp

熊「おお、たった3ぎょう。べんりな よのなかに なったもの よのう」


・・・誰の真似?


Flagsを指定してみる

じゃ、メニューを選択したら、新しいWindowでクマページに跳ぶ様にしましょう
CComBSTR url ( L"http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%9E" );
CComVariant vEmpty;
CComVariant vFlags;
vFlags.vt = VT_I4;
vFlags.lVal = navOpenInNewWindow;

m_spBrowser->Navigate ( url, &vFlags, &vEmpty, &vEmpty, &vEmpty );

こんな感じです
見たとおり、フラグのところにVT_I4とnavOpenInNewWindowを指定してます
なんでこんな書き方をするのか、詳しいことは知りません
lVal に代入する値を変えると、いろんな効果が発動します
例えばnavNoHistoryを指定すると・・・何か変な動きするなぁ
今表示しているページを履歴に入れない??

また、2つのパラメータを同時指定もできます
navNoReadFromCache | navAllowAutosearchみたいに

設定できる値は、この辺参照
http://msdn.microsoft.com/en-us/library/aa768360(VS.85).aspx

あ、あと、vFlagsの値、コンストラクタでも指定できるらしい
CComVariant vFlags ( navOpenInNewWindow, VT_I4 );
こんな感じで書いた方が楽っぽい


TargetFrameNameを指定してみる

こんな感じです

CComBSTR url ( L"http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%9E" );
CComVariant vEmpty;
CComVariant vTarget ( L"_blank" );
m_spBrowser->Navigate ( url, &vEmpty, &vTarget, &vEmpty, &vEmpty );

値はコンストラクタで指定してみた

//CComVariant vTarget;
//vTarget.vt = VT_BSTR;
//vTarget.bstrVal = L"_blank";
と書いても良い・・・・と思われる
どっちが良いかは・・・・不明

熊「コンストラクタ見れば分かるだろ」

はい、後でちゃんと見ます・・・


HOME    次へ


コメントスペース