Форум › Форумы › ГЛАВНЫЙ ФОРУМ › Получить post data в xamarin
- В этой теме 1 ответ, 2 участника, последнее обновление 2 месяца, 1 неделя назад сделано
MixBot.
-
АвторЗаписи
-
26.12.2025 в 19:34 #79
oparish249УчастникЗдравствуйте,
в мобильном приложении, написанном на xamarin нужно сделать так, чтобы при заполнении данных в форме регистрации на сайте https://lkabit.dvgups.ru/user/… in%2Flogin, открытом через WebView при нажатии на кнопку “Зарегистрироваться”, логин и пароль сохранялись в переменные в приложении Xamarin, был написан, следующий кодusing CutWebView.ViewModels; using System; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace CutWebView.Views { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class AboutPage : ContentPage { public AboutPage(AboutViewModel pg) { InitializeComponent(); Entrance(); } bool trans = false; string admuser_name; string admuser_passw; private async Task Entrance() { if (trans) { // Пользователь авторизован webView.Source = "https://lkabit.dvgups.ru/user/sign-in/login?_referrer=%2Fsite%2Findex"; await webView.EvaluateJavaScriptAsync($"document.getElementById('loginform-identity').value = '{user_name}';"); await webView.EvaluateJavaScriptAsync($"document.getElementById('loginform-password').value = '{user_passw}';"); await webView.EvaluateJavaScriptAsync("document.getElementsByName('login-button')[0].click();"); } else { // Перенаправление на страницу регистрации webView.Source = "https://lkabit.dvgups.ru/user/sign-in/abiturient-signup?_referrer=%2Fuser%2Fsign-in%2Flogin"; LoadWebView(); } } private void LoadWebView() { webView.Source = "https://lkabit.dvgups.ru/user/sign-in/abiturient-signup?_referrer=%2Fuser%2Fsign-in%2Flogin"; webView.Navigated += async (s, e) => { string jsCode = @" document.getElementById('signup-button').addEventListener('click', function() { var email = document.getElementById('abiturientsignupform-email').value; var password = document.getElementById('abiturientsignupform-password').value; var data = { email: email, password: password }; window.xamarin_data = JSON.stringify(data); }); "; await webView.EvaluateJavaScriptAsync(jsCode); }; } private async void LoginButtonClicked() { // Извлекаем данные из webView string jsCode = "window.xamarin_data;"; string jsonData = await webView.EvaluateJavaScriptAsync(jsCode); if (!string.IsNullOrEmpty(jsonData)) { // Парсим JSON данные var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonData); string email = data["email"]; string password = data["password"]; // Сохраняем данные в базе данных admuser_name = email; admuser_passw = password; if (!(email is null && password is null)) trans = true; await Entrance(); } } } }Однако приложение даже не запускается с ним, в чем может быть проблема?
13.05.2026 в 09:54 #162
MixBotУчастникПроблема в том, что метод LoginButtonClicked() нигде не вызывается. Вы добавили код для перехвата данных из формы, но привязали его к событию Navigated WebView. Это событие срабатывает один раз при загрузке страницы, до того как пользователь вообще что-то ввел. В результате переменная trans всегда false, а нужная функция никогда не выполняется.
Кроме того, скорее всего краш происходит из-за race condition: вы пытаетесь выполнить JavaScript до полной загрузки DOM. Решение навесить обработчик нажатия кнопки не через Navigated, а через инъекцию JavaScript после загрузки страницы с ожиданием готовности элементов. И главное добавьте вызов LoginButtonClicked() в нужное место, например, на событие клика кнопки в XAML или через WebView.Navigated после того, как форма регистрации полностью отрисовалась и пользователь ввел данные.
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.