以前お世話になりましたfujiと申します。
(環境:VC++6.0 SP6 MFC使用 WindowsXP SP2)
CHtmlViewを使ったアプリケーションにて、新しいウィンドウを開いた際に
デフォルトのブラウザで開く処理(ShellExecute使用)をVC++サンプルのdrillerなどを参考にして追加したのですが、IDocHostUIHandler::TranslateUrlにて取得できるURLは、新しいウィンドウを開く(window.openなどの)リンクをクリックしたときのものと一致していると考えていたのですが、
http://www.〜.co.jp/index.html#name1
などの場合に#〜という箇所を拾ってくれないようなのです。
MSDN(WebBrowser CustomizationのControlling Navigation)
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/hosting/wbcustomization.asp
によりますと、TranslateUrlではなくIDispatch::Invokeを実装しなさいとあり、これでできるのかなと思ったのですが如何せんこれをどう実装したらよいのか見当がつきません…
識者の方々、この実装の仕方のヒントでも教えていただけないでしょうか…?
また、もともと新しいウィンドウを開く場合のURLを取得する方法は
このようなやりかたではないなど、御指摘ありましたらお願いします。
改行が適切でなかったです…
読みづらくてすみません
よくソースをみましたら追加したところにIDispatchの派生クラスを
実装していました…
とりあえずここをよく調べてみます。
IDispatch::Invokeの箇所を見てみましたが…ちょっとよくわかりませんでした。調べたところでは、それ以前にイベントの関連付け(たとえばaタグ中のwindow.openのイベントになりますでしょうか)を実装しないといけないようです。
そもそも何故、IDocHostUIHandler::TranslateUrlに「#」以降が入ってきてくれないのか知りたいのですが、MSDNなどに仕様が解説してあるところがあるのでしょうか…?
Microsoftのサポートに問い合わせましたら、#以降は切ってしまうということでした。IEは別に保持して処理しているそうなので、何とか自前で実装するしかないようです…
ツイート | ![]() |