2011-02-24 35 views

回答

4

如果通過設置IsScriptEnabled="true"啓用的WebBrowser控制腳本就可以使用下面的瀏覽器中向後導航:

private void backButton_Click(object sender, EventArgs e) 
{ 
    try 
    { 
    browser.InvokeScript("eval", "history.go(-1)"); 
    } 
    catch 
    { 
    // Eat error 
    } 
}

你可以找到肖Wildermuth的博客此代碼(多一點)後Navigating with the WebBrowser Control on WP7

+1

骯髒但漂亮的黑客% – abatishchev 2011-02-26 01:23:27

+1

我仍然無法預測我是否可以回去。 (根據歷史記錄禁用我的後退按鈕)舊的silverlight4具有CanGoBack屬性,但遺憾地遺漏了該屬性。 – Mugunth 2011-03-01 06:27:12

9

我剛剛處理內部Overflow7

我決定在C#中,而不是在Javascript來處理這個同樣的問題。基本上,在我的網頁我添加的URI的堆棧:

private Stack<Uri> NavigationStack = new Stack<Uri>(); 

,我已經截獲了Web瀏覽器的導航的事件:

void TheWebBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     NavigationStack.Push(e.Uri); 
    } 

然後在後面的按鍵覆蓋我嘗試如果我可以使用後退按鈕瀏覽: - 也不符合「Ajax」的網站 -

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
    { 
     if (NavigationStack.Count > 1) 
     { 
      // get rid of the topmost item... 
      NavigationStack.Pop(); 
      // now navigate to the next topmost item 
      // note that this is another Pop - as when the navigate occurs a Push() will happen 
      TheWebBrowser.Navigate(NavigationStack.Pop()); 
      e.Cancel = true; 
      return; 
     } 

     base.OnBackKeyPress(e); 
    } 

請注意,此解決方案不適用於墓碑完美地工作,但總體而言,它似乎工作得很好。

+0

斯圖爾特,我認爲這是一個很棒的想法,我之前使用過一個Uri Stack,並且它的價值是改善用戶體驗的一個很好的方式,當涉及到使用webbrowser任務時 – 2012-04-13 23:18:15

+0

只是爲了防止其他人被絆倒這個 - 「導航」事件僅在用戶在全新頁面結束時觸發(並且不爲內部的#inthispage書籤觸發)。然而,一切都不會丟失 - 在這些情況下,「導航」事件仍然會發生。 – 2014-01-08 21:18:58