Ошибка при добавлении поисковой системы (например, Google) в пользовательский браузер - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь добавить возможность использования адресной строки в качестве строки поиска (как любой браузер уже делает, так что вы можете написать что-то и искать это с помощью 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); 
}

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

1 Ответ

0 голосов
/ 06 июня 2018

Если вы просто хотите найти ключевое слово, которое вы ввели, вы можете напрямую использовать ключевое слово в качестве вопроса поиска и заставить 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..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...