現在、セッションからすべてのサイトを追加するリストボックスを使用していますが、信頼性が低く、戻るボタンでは機能しません。ブラウザ コントロールから履歴と Cookie にアクセスするにはどうすればよいですか。
Windows phone の戻るボタンのコードもありますか? GoBack();
動作しません。
現在、セッションからすべてのサイトを追加するリストボックスを使用していますが、信頼性が低く、戻るボタンでは機能しません。ブラウザ コントロールから履歴と Cookie にアクセスするにはどうすればよいですか。
Windows phone の戻るボタンのコードもありますか? GoBack();
動作しません。
Web ブラウザー コントロールでナビゲートするページをアプリケーションの履歴スタックに追加して、ユーザーが電話の戻るボタンを使用して戻ることができるようにすることができます。
この問題について、MSDN ブログで非常に興味深い記事を見つけました。コードのごく一部をコメントとして投稿します。
1) WebBrowser.Navigated イベントをリッスンします。アクセスしたページを追跡します。
Stack<Uri> history= new Stack<Uri>();
Uri current = null;
private void WebBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
Uri previous = null;
if (history.Count > 0)
previous = history.Peek();
// This assumption is NOT always right.
// if the page had a forward reference that creates a loop (e.g. A->B->A ),
// we would not detect it, we assume it is an A -> B -> back ()
if (e.Uri == previous)
{
history.Pop();
}
else
{
if (current != null)
history.Push(current);
}
current = e.Uri;
}
2) ページで OnBackKeyPress を聞きます。WebBrowser にナビゲーション スタックがある場合は、backkeypress をキャンセルして、WebBrowser コントロールのスタック内を移動します。
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
base.OnBackKeyPress(e);
if (!isPerformingCloseOperation)
{
if (history.Count > 0)
{
Uri destination = history.Peek();
webBrowser.Navigate(destination);
// What about using script and going history.back?
// you can do it, but
// I rather use that to keep ‘track’ consistently with our stack
e.Cancel = true;
}
}
}
うまく実装されていないエッジケースがまだいくつかあることに注意してください。
ご覧のとおり、コードは簡単ですが、解決されていない問題があります。次の違いを区別できません。
結論として、ここに要約があります:
これで何かできることを願っています。
(ブログとコードを書いた Jaime Rodriguez の功績を称えます。私は単に彼が書いた内容のダイジェストを投稿しているだけです。)