Windows 8 Web视图中的简单导航

时间:2014-06-03 18:13:39

标签: windows windows-8 webview windows-store-apps

我正致力于将Windows Phone 8应用程序移植到平板电脑,而且我遇到了WebView API的问题。在Windows Phone 8和Windows 8.1中,WebBrowserWebView控件都具有GoBack()方法。但是,我需要我的应用程序与Windows 8兼容,其WebView API没有这样的方法。是否存在任何人用于Windows 8应用程序的替代方案/解决方法?

2 个答案:

答案 0 :(得分:1)

最后,我最终编写了一个WebView包装器来管理导航堆栈。这是相关代码,适合任何有兴趣的人。请注意,我只需要处理向后导航,因此我使用了Stack。如果还需要转发导航,则将Stack替换为List并将其存储为当前页面的索引可能是有意义的。

public class WebViewWrapper
{
    private Stack<Uri> _navigationStack;
    private Uri _currentUri;

    public WebView WebView { get; private set; }
    public bool CanGoBack
    {
        get { return _navigationStack.Count > 0; }
    }

    public WebViewWrapper(WebView _webView)
    {
        _navigationStack = new Stack<Uri>();
        WebView = _webView;
        WebView.LoadCompleted += (object s, NavigationEventArgs e) => {
            if (_currentUri != null)
            {
                _navigationStack.Push(_currentUri);
            }
            _currentUri = e.Uri;
        };
    }

    public void GoBack()
    {
        if (CanGoBack)
        {
            _currentUri = null;
            WebView.Navigate(_navigationStack.Pop());
        }
    }
}

使用示例如下:

// Code behind for a view called WebBrowserPage
public sealed partial class WebBrowserPage : Page 
{
    private WebViewWrapper _webViewWrapper;

    public WebBrowserPage()
    {
        // webView is a WebView in the xaml with x:Name="webView"
        _webViewWrapper = new WebViewWrapper(webView);  
    }

    // Other code for navigating to a Uri specified in a ViewModel.

    // Event handler for a back button press
    private void BackButton_Click(object sender, RoutedEventArgs e)
    {
        if (_webViewWrapper.CanGoBack)
        {
            _webViewWrapper.GoBack();
        }
        else 
        {
            // Code that executes a command in the ViewModel to leave the WebBrowserPage
        }
    }
}

答案 1 :(得分:0)

WinRT XAML Toolkit有一个WebBrowser控件可以执行其中一些操作,但我没有在任何应用程序中使用它,所以我无法保证它的质量。