none
WebViewコントロールの表示履歴 RRS feed

  • 質問

  • 開発言語:C#
    開発環境:VS2012 Ultimate

    --

    外部のWebサイトを表示するWebViewコントロールを含むアプリを開発しています。

    自前で 戻る/進む ボタンを設置し、Viewのビハインドコードで、下記の用に処理を実装しています。

    (戻る)webView.InvokeScript("eval", new[] { "history.back()" });
    (進む)webView.InvokeScript("eval", new[] { "history.forward()" });

    この機能自体は問題ないのですが、可能であれば、表示履歴の先頭で戻るボタン/表示履歴の末尾では進むボタン をそれぞれDisableにしたいです。
    現在表示しているページが履歴の先頭か末尾かをチェックする方法はありますでしょうか?

    よろしくお願いいたします。


    • 編集済み NIM5 2013年6月18日 0:41
    2013年6月17日 13:31

回答

  • 自前で履歴管理するのを、ちょっとやってみました。
    http://code.msdn.microsoft.com/windowsapps/WebView-a2f1d3b0

    JavaScript で back()/forward() させれば、表示していた画面のスクロール位置なども復元されてるのですが、遷移しきる前にユーザーがリンクをクリックするなどして他のページへ移ってしまうと、自前で管理している履歴と齟齬が生じてしまいます。
    自前で管理している Uri に Navigate() すれば、履歴管理に齟齬を生じる心配はないのですが、スクロール位置などが復元されません。
    あちら立てればこちら立たず、という状況ですね。


    biac [ http://bluewatersoft.cocolog-nifty.com/ ]

    • 回答としてマーク NIM5 2013年6月18日 9:37
    2013年6月18日 6:49

すべての返信

  • > 現在表示しているページが履歴の先頭か末尾かをチェックする方法はありますでしょうか?

    「履歴」というのが WebView コントロール (内部的には IE10 を利用) の管理している履歴のことならば、IE10 にそのようなインターフェイスが用意されない限りは無理でしょう。

    WebView でページが表示されたときに発生する LoadCompleted イベントで、表示された Uri を取得できますので、自前で履歴管理をすることは可能だと思います。


    biac [ http://bluewatersoft.cocolog-nifty.com/ ]

    2013年6月18日 3:52
  • "戻る","進む" の処理は、JavaScriptをInvokeして実現しているので、WebViewの質問というよりは、「JavaScriptにそういうコマンドはありますか?」という質問の方が適切だったかもしれません。

    (そうなると、質問するフォーラムが違うということになりますね・・・)

    自前で履歴管理するのは、(IE10側のキャッシュの上限を考慮しなければ)出来そうですね。
    悩んでるよりそちらで作ってしまった方が早いかも。


    • 編集済み NIM5 2013年6月18日 4:20
    2013年6月18日 4:16
  • 自前で履歴管理するのを、ちょっとやってみました。
    http://code.msdn.microsoft.com/windowsapps/WebView-a2f1d3b0

    JavaScript で back()/forward() させれば、表示していた画面のスクロール位置なども復元されてるのですが、遷移しきる前にユーザーがリンクをクリックするなどして他のページへ移ってしまうと、自前で管理している履歴と齟齬が生じてしまいます。
    自前で管理している Uri に Navigate() すれば、履歴管理に齟齬を生じる心配はないのですが、スクロール位置などが復元されません。
    あちら立てればこちら立たず、という状況ですね。


    biac [ http://bluewatersoft.cocolog-nifty.com/ ]

    • 回答としてマーク NIM5 2013年6月18日 9:37
    2013年6月18日 6:49
  • わざわざコードまで書いて頂きまして恐縮です。

    スクロール位置まではいいかな?と思うので、明示的にNavigate()する方法で試してみます。

    ありがとうございました。

    2013年6月18日 9:39
  • Windows 8.1 の WebView には、 GoBack / GoForward / Stop / Refresh メソッドや、 CanGoBack / CanGoForward プロパティが追加されます。 おそらく、これらを使えば簡単に実現できるでしょう。

    biac [ http://bluewatersoft.cocolog-nifty.com/ ]

    2013年6月28日 7:30
  • 情報ありがとうございます。まさに欲しいものそのものですね。他にもニーズがあったということなんでしょう。

    Windows8.1のAPIって、Windows8では使えるようになるんでしょうかね・・・?

    8→8.1は無料でアップできるということなので、気にしなくてもよいのかもしれませんが。

    2013年6月28日 8:51