Имея ошибку, добавляющую поисковую систему (например, Google) к настраиваемому браузеру

Ender Look спросил: 12 мая 2018 в 04:44 в: c#

Я пытаюсь добавить возможность использования адресной строки в качестве строки поиска (как и любой браузер уже, так что вы можете что-то писать и искать с помощью Google или Bing и т. д.), но у меня проблема с однопользовательской поиск ... например: если я ищу "Привет" (1 слово), это не сработает, но если я ищу "Привет" (2 слова), то он делает. Я пытаюсь исправить это.

Сейчас это мой код после переделки на основе комментария @Spender. Теперь он использует меньше try / catch (я использую Webview):

public void Go(ref WebView web, string value, KeyRoutedEventArgs args)
{
    Uri uri;
    if (Uri.TryCreate(value, UriKind.Absolute, out uri))
    {
    }
    else if (Uri.TryCreate($"http://{value}", UriKind.Absolute, out uri))
    {                    
    }
    else if (Uri.TryCreate($"https://{value}", UriKind.Absolute, out uri))
    {
    }
    else if (Uri.TryCreate($"https://www.google.com/search?q={Uri.EscapeUriString(value)}", UriKind.Absolute, out uri))
    {
    }
    try
    {
        using (HttpClient Client = new HttpClient())
        {
            HttpResponseMessage result = Client.GetAsync(uri).Result;
            HttpStatusCode StatusCode = result.StatusCode;            if (StatusCode == HttpStatusCode.Accepted || StatusCode == HttpStatusCode.OK)
            {
            } else
            {
                throw new System.ArgumentException("No exist", "original");
            }
        }
    }
    catch
    {
        Uri.TryCreate($"https://www.google.com/search?q={Uri.EscapeUriString(value)}", UriKind.Absolute, out uri);
    }
    web.Navigate(uri);
    web.Focus(Windows.UI.Xaml.FocusState.Keyboard); 
}

Теперь это работает нормально, но я не думаю, что это способ propper сделать это ... блок try очень медленный, для открытия страницы требуется почти 4 секунды. Есть что-то лучшее, что я могу сделать?

1 ответ

Breeze Liu - MSFT ответил: 13 мая 2018 в 07:31

Если вы просто хотите найти ключевое слово, которое вы вводите, вы можете напрямую использовать ключевое слово в качестве поискового вопроса и заставить WebView перейти к uri, поэтому код будет примерно таким:

public void Go(ref WebView web, string value, KeyRoutedEventArgs args)
{
    Uri uri;
    if (Uri.TryCreate($"https://www.google.com/search?q={Uri.EscapeUriString(value)}", UriKind.Absolute, out uri))
    {
    }
    web.Navigate(uri);
    web.Focus(Windows.UI.Xaml.FocusState.Keyboard);
}

Что касается временной задержки, это потому, что вы использовали код

HttpResponseMessage result = Client.GetAsync(uri).Result;

Этот код будет стоить много времени, чтобы запрос или совпадение, чтобы определить, является ли это правильным uri.