2

現在、セッションからすべてのサイトを追加するリストボックスを使用していますが、信頼性が低く、戻るボタンでは機能しません。ブラウザ コントロールから履歴と Cookie にアクセスするにはどうすればよいですか。

Windows phone の戻るボタンのコードもありますか? GoBack();動作しません。

4

1 に答える 1

4

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;
        }
    } 
}

うまく実装されていないエッジケースがまだいくつかあることに注意してください。

ご覧のとおり、コードは簡単ですが、解決されていない問題があります。次の違いを区別できません。

  • ナビゲート(a) –> ナビゲート(b) –> 戻る();
  • ナビゲート(a) –> ナビゲート(b) –> ナビゲート(a);

結論として、ここに要約があります:

  • すべてのアプリがこの統合を必要とするわけではありません。1 つのページを表示するだけで、ナビゲーションを促したくない場合は、UI が一時的なものであることをユーザーに示唆する UX パターンを使用します。ポップアップのように見せ、ポップアップに閉じるボタンを配置してください。</li >
  • ブラウザーでのナビゲーションを促すアプリがある場合は、上記のパターンを検討してください。認定要件のためにそれを行うのではなく、ユーザーにとって直感的であるために行ってください。それが要件が存在する理由です。
  • アプリが上記のいずれにも当てはまらないと思われる場合は、認定チームに例外を申請してください。とはいえ、ユーザーにとって直感的なエクスペリエンスを作成するために成長する必要があることを強調します. 言い訳/例外ルートとは対照的に、2つのオプションが最も効果的だと思うので、それらをお勧めします.

これで何かできることを願っています。

(ブログとコードを書いた Jaime Rodriguez の功績を称えます。私は単に彼が書いた内容のダイジェストを投稿しているだけです。)

于 2013-01-03T23:34:15.343 に答える