我有一個嵌入到PhoneApplicationPage中的Web瀏覽器控件。我必須處理硬件返回按鈕並強制Web瀏覽器返回。處理硬件後退按鈕並將其發送到在Windows Phone上運行的WebBrowser控件
我know如何處理硬件後退按鈕。
你如何強制網頁瀏覽器轉到上一頁? WinForms webbrowser上看似簡單的GoBack()
和CanGoBack
屬性似乎在Windows Phone上缺失。
我有一個嵌入到PhoneApplicationPage中的Web瀏覽器控件。我必須處理硬件返回按鈕並強制Web瀏覽器返回。處理硬件後退按鈕並將其發送到在Windows Phone上運行的WebBrowser控件
我know如何處理硬件後退按鈕。
你如何強制網頁瀏覽器轉到上一頁? WinForms webbrowser上看似簡單的GoBack()
和CanGoBack
屬性似乎在Windows Phone上缺失。
如果通過設置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。
我剛剛處理內部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);
}
請注意,此解決方案不適用於墓碑完美地工作,但總體而言,它似乎工作得很好。
斯圖爾特,我認爲這是一個很棒的想法,我之前使用過一個Uri Stack,並且它的價值是改善用戶體驗的一個很好的方式,當涉及到使用webbrowser任務時 – 2012-04-13 23:18:15
只是爲了防止其他人被絆倒這個 - 「導航」事件僅在用戶在全新頁面結束時觸發(並且不爲內部的#inthispage書籤觸發)。然而,一切都不會丟失 - 在這些情況下,「導航」事件仍然會發生。 – 2014-01-08 21:18:58
骯髒但漂亮的黑客% – abatishchev 2011-02-26 01:23:27
我仍然無法預測我是否可以回去。 (根據歷史記錄禁用我的後退按鈕)舊的silverlight4具有CanGoBack屬性,但遺憾地遺漏了該屬性。 – Mugunth 2011-03-01 06:27:12