Форум программистов, компьютерный форум, киберфорум
Программирование Windows Phone
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста как организовать методы в коде (куда, какой) так, чтобы webview грузился с адреса сохраненного ранее в настройках? Сам механизм сохранения настроек я реализовал (по одной кнопке адрес сохраняется, по другой всплывает в сообщении) а сделать так что бы webview загрузился с сохраненного адреса ни как не могу.
Помогите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2015, 14:06
Ответы с готовыми решениями:

Пишу шашки на C#, как организовать логику игры
Я пишу шашки, но пока что я начинающий сишарпер и мне нужно сформировать условие, а заключается оно в следующем: первые 2 IF организуют ход...

Как организовать логику работы двух CheckBox
Пишу программу, которая ищет музыку или видио(или и то и то ) по компьютеру. имеется два CheckBox'a в которых задается что искать. ...

Symfony 2: как правильно организовать бизнес-логику?
Всем привет! Вот я недавно начал один проект на Symfony 2 и сразу же столкнулся одной проблемой - организацией бизнес-логики. Например, у...

5
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
22.12.2015, 19:36
Я сам новичок в 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
Надеюсь, что угадал твою мысль.
1
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
22.12.2015, 20:31  [ТС]
Спасибо за отклик, друг. В попытках развить обсуждение, представлю класс 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; }     
        }
   }
0
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
22.12.2015, 20:59
Лучший ответ Сообщение было отмечено Максим2016 как решение

Решение

ОК, попробуем разобраться.
Итак, два объекта (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() вызывать только сохранение, чтение на данном этапе тебе уже не нужно.
1
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
22.12.2015, 22:04  [ТС]
Здорово! Получилось!
Огромное человеческое спасибо тебе 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;
        }
0
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
23.12.2015, 10:25
Но вот что реально беспокоит, это как повлияло на код то, что в объявлении объекта Uri пришлось убрать модификатор "readonly".
ИМХО, никак не должно повлиять.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2015, 10:25
Помогаю со студенческими работами здесь

Создать программу тестирования, как организовать логику
Уважаемые ФОРУМЧАНЕ! Нужна помощь. Работаю в ВУЗе. Надо сделать программу по тестированию знаний. Купить, как обычно в бюджетной...

Как организовать подобную логику страниц/рубрик
Коллеги, подскажите схему реализации такой логики расположения материалов, как на сайте вилгуд. С исходной страницы...

Крестики нолики - как организовать интерфейс и логику игры?
С чего нужно начать в коде ? Если хочу в Windows Forms сделать. Как создать массив это я знаю, а как этому массиву добавить квадратики...

Как лучше организовать бизнес-логику и сильно связанные сущности
Доброго времени суток! Суть вот в чем. В модели Entity Framework (db first) имеется несколько сущностей, допустим &quot;Заявка&quot; и...

Как организовать логику логин\пароль на сервере Winsock + msSql + С++?
Делаю сервер на c++. Мне нужен метод транспортировки логина пароля от клиента на сервер. Сервер с++, клиент C#. У форме c# есть 2 поля...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru