Форум программистов, компьютерный форум CyberForum.ru

Программирование Windows Phone

Войти
Регистрация
Восстановить пароль
 
Максим2016
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
#1

Как организовать логику приложения WebView - Windows Phone

22.12.2015, 14:06. Просмотров 268. Ответов 5
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста как организовать методы в коде (куда, какой) так, чтобы webview грузился с адреса сохраненного ранее в настройках? Сам механизм сохранения настроек я реализовал (по одной кнопке адрес сохраняется, по другой всплывает в сообщении) а сделать так что бы webview загрузился с сохраненного адреса ни как не могу.
Помогите пожалуйста.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2015, 14:06     Как организовать логику приложения WebView
Посмотрите здесь:

Заставка приложения Windows Phone
Как создать splash-скрин для приложения Windows Phone
Windows Phone Разблокировка windows phone 7.8. Как разлочить для тестирования приложения на устройстве?
Как сохранить настройки приложения при обновлении? Windows Phone
Как локализовать название приложения в сторе? Windows Phone
Windows Phone На иконке отсутствует название приложения, как вылечить?
Windows Phone Скачивание файлов WebView
Как открыть магазин из приложения Windows Phone
Windows Phone Как установить дату окончания испытательного срока пробного приложения
Windows Phone Ориентация (поворот) элемента WebView
Windows Phone Элемент WebView вывод изображений
Windows Phone Реализация индикатора загрузки WebView (только начал программировать на UWP)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
22.12.2015, 19:36     Как организовать логику приложения WebView #2
Я сам новичок в Win 10, но наберусь наглости тебе ответить, ибо вопрос выглядит простым, ИМХО.
В классе MainPage (а я надеюсь, он у тебя есть) имеется ф-я OnNavigatedTo(). В нее вставляешь примерно такой код:
C++
1
2
3
String^ myUrl = get-my-url-from-storage(); //это у тебя уже есть
Uri^ targetUri = ref new Uri(myUrl);
myWebView->Navigate(targetUri);
Сорри, что код на плюсах, концепуха везде одна.
Ну а объект myWebView должен быть объявлен в MainPage.xaml
Надеюсь, что угадал твою мысль.
Максим2016
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
22.12.2015, 20:31  [ТС]     Как организовать логику приложения WebView #3
Спасибо за отклик, друг. В попытках развить обсуждение, представлю класс MainPage, дабы прояснить свою некомпетентность в C#, и выявить что именно я делаю не так. Так как логика в основе у нас совпала!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
   
  public sealed partial class MainPage : Page
    {
 
        static String loadUrl = "http://ya.ru"; [B]//!!!!! Вот здесь я незнаю как вызвать get-url-from-storage(); 
[/B]
        private static readonly Uri HomeUri = new Uri(loadUrl, UriKind.Absolute);   
        public MainPage()
        {
            this.InitializeComponent();
            this.NavigationCacheMode = NavigationCacheMode.Required;
        }
 
        /// <summary>
        /// Вызывается перед отображением этой страницы во фрейме.
        /// </summary>
        /// <param name="e">Данные события, описывающие, каким образом была достигнута эта страница.
        /// Этот параметр обычно используется для настройки страницы.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            WebViewControl.Navigate(HomeUri);
 
            HardwareButtons.BackPressed += this.MainPage_BackPressed;
        }
 
        /// <summary>
        /// Вызывается переходе с данной страницы.
        /// </summary>
        /// <param name="e">Данные о событиях, описывающие переход на эту страницу.</param>
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            HardwareButtons.BackPressed -= this.MainPage_BackPressed;
        }
 
        /// <summary>
        /// Переопределение нажатия кнопки "Назад" для навигации по обратному стеку веб-представления, а не приложения.
        /// </summary>
        private void MainPage_BackPressed(object sender, BackPressedEventArgs e)
        {
            if (WebViewControl.CanGoBack)
            {
                WebViewControl.GoBack();
                e.Handled = true;
            }
        }
 
        private void Browser_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
        {
            if (!args.IsSuccess)
            {
                Debug.WriteLine("Navigation to this page failed, check your internet connection.");               
            }
        }
 
        /// <summary>
        /// Переход вперед по журналу веб-представления.
        /// </summary>
        private void ForwardAppBarButton_Click(object sender, RoutedEventArgs e)
        {
            if (WebViewControl.CanGoForward)
            {
                WebViewControl.GoForward();
            }
        }
        /// <summary>
        /// Вызываем сохранение и сразу чтение (чтобы задействовать только одну кнопку) требуемую инфор-ию.
        /// </summary>
 
        private async void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            await writeXMLAsync();
            await readXMLAsync();
            //Вызываем всплывающее сообщение с сохраненной информацией
            MessageDialog msgbox = new MessageDialog("s", "" + loadUrl);
            await msgbox.ShowAsync();       
        }
           // извлекаем адрес и пишем в хранилище 
        private async Task writeXMLAsync()
        {
            Url u = new Url();
            u.NameUrl = WebViewControl.Source.ToString();
            var serializer = new DataContractSerializer(typeof(Url));
            using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(
                "data.xml", CreationCollisionOption.ReplaceExisting))
            {
                serializer.WriteObject(stream, u);
            }
        }
         //извлекаем из хранилища
        private async Task readXMLAsync()
        {
            var serializer = new DataContractSerializer(typeof(Url));
 
            // проверка наличия файла
            bool existed = await FileExists(ApplicationData.Current.LocalFolder, "data.xml");
            if (existed)
            {
                using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("data.xml"))
                {
                    Url u = (Url)serializer.ReadObject(stream);
                    loadUrl = u.NameUrl;
                }
            }       
        }
        // проверка наличия файла
        public async Task<bool> FileExists(StorageFolder folder, string fileName)
        {
            return (await folder.GetFilesAsync()).Any(x => x.Name == fileName);
        }
   // нужен для реализации такого способа сохранения информации
        public class  Url
        {            
            public string NameUrl { get; set; }     
        }
   }
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
22.12.2015, 20:59     Как организовать логику приложения WebView #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ОК, попробуем разобраться.
Итак, два объекта (loadUrl и HomeUri) в начале просто создаешь/объявляешь, без значения.
Вот псевдокод, может компилятор Шарпа будет ругаться, главное, чтобы ты понял принцип:
C#
1
2
    static String loadUrl; //просто объявляешь
    private static readonly Uri HomeUri; //так же просто объявляешь
А ф-я OnNavigatedTo() будет выглядеть примерно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
  protected override void OnNavigatedTo(NavigationEventArgs e)
  {
      await readXMLAsync();  // здесь считываешь сохраненное значание, от предыдущих сессий
    if (loadUrl == NULL) //если еще не сохранялось - задаешь дефолт
    {
      loadUrl = "http://ya.ru";
      HomeUri = new Uri(loadUrl, UriKind.Absolute);
    }
 
    WebViewControl.Navigate(HomeUri);
 
    HardwareButtons.BackPressed += this.MainPage_BackPressed;
  }
И, разумеется, чтобы или в конце сессии или по нажатию кнопки твой url сохранился в файл. А в ф-ии SaveButton_Click() вызывать только сохранение, чтение на данном этапе тебе уже не нужно.
Максим2016
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
22.12.2015, 22:04  [ТС]     Как организовать логику приложения WebView #5
Здорово! Получилось!
Огромное человеческое спасибо тебе vkiper!

Получилось именно так как ты и задумал. Лишь HomeUri = new Uri(loadUrl, UriKind.Absolute); из проверки на null переменной адреса по умолчанию - вынес. Но вот что реально беспокоит, это как повлияло на код то, что в объявлении объекта Uri пришлось убрать модификатор "readonly".
Вот так все отлично работает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       
 static String loadUrl;
 private static Uri HomeUri;
 
 protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            await readXMLAsync();
            if (loadUrl == null) //если еще не сохранялось - задаешь дефолт
            {
                loadUrl = "http://ya.ru";                
            }
            HomeUri = new Uri(loadUrl, UriKind.Absolute);
            WebViewControl.Navigate(HomeUri);
            HardwareButtons.BackPressed += this.MainPage_BackPressed;
        }
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
23.12.2015, 10:25     Как организовать логику приложения WebView #6
Но вот что реально беспокоит, это как повлияло на код то, что в объявлении объекта Uri пришлось убрать модификатор "readonly".
ИМХО, никак не должно повлиять.
Yandex
Объявления
23.12.2015, 10:25     Как организовать логику приложения WebView
Ответ Создать тему
Опции темы

Текущее время: 08:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru