я не уверен, где вы пытаетесь справиться с действием, является ли в JavaScript или C# в приложении, так что я постараюсь решить обе. Короткий ответ: пусть javascript обрабатывает его, и, если нужно, сделайте обратный вызов в приложении из javascript, как только выбор был сделан из диалогового окна.
оповещения Пример
public override void RunJavaScriptAlertPanel(WKWebView webView, string message, WKFrameInfo frame, Action completionHandler)
{
var alert = UIAlertController.Create("Alert", message, UIAlertControllerStyle.Alert);
alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
//Let javascript handle the OK click by passing the completionHandler to the controller
ViewController.PresentViewController(alert, true, completionHandler);
}
Подтверждение Пример
public override void RunJavaScriptConfirmPanel(WKWebView webView, string message, WKFrameInfo frame, Action<bool> completionHandler)
{
var alert = UIAlertController.Create("Please confirm", message, UIAlertControllerStyle.Alert);
//Let javascript handle the OK click by passing the completionHandler to the controller
alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, action => completionHandler(true)));
//Let javascript handle the Cancel click by passing the completionHandler to the controller
alert.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, action => completionHandler(false)));
ViewController.PresentViewController(alert, true, null);
}
Подсказка Пример
public override void RunJavaScriptTextInputPanel(WKWebView webView, string prompt, string defaultText, WKFrameInfo frame, Action<string> completionHandler)
{
var alert = UIAlertController.Create("Prompt", prompt, UIAlertControllerStyle.Alert);
alert.AddTextField(textfield => { textfield.Placeholder = defaultText; });
alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, action => completionHandler(alert.TextFields[0].Text)));
alert.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, action => completionHandler(null)));
ViewController.PresentViewController(alert, true, null);
}
Так что дает вам пример того, как передать кнопку мыши на javascript. Если вы хотите, чтобы javascript выполнял обратный вызов, вам нужно зарегистрировать обработчики сценариев путем подкласса от WKScriptMessageHandler
. Здесь приведен базовый пример: https://forums.xamarin.com/discussion/41777/wkwebview-caching-not-working
Как примечание, UIAlertView
устарел. Вместо этого вы можете начать использовать UIAlertController
. См. https://stackoverflow.com/a/32690371/5606840. Если вы хотите получить доступ к контроллеру представления для отображения предупреждений, передайте его в свой класс WKUIDelegate
при инициализации.
Редактировать
Расширять о том, как обрабатывать результаты в JavaScript
alert('This is an alert');
WebView приостановит яваскрипту нить и называет RunJavaScriptAlertPanel
. Как только кнопка ОК нажата, она перезвонит завершениеHandler в webview, а остальная часть кода javascript будет выполнена.
if (confirm('Do you want to confirm this?')) {
//Do some code here when the user clicks ok
} else {
//Do other code here when the user clicks cancel
}
Как предупредительного например, когда Javascript попадается метода подтверждающим, он будет вызывать RunJavaScriptConfirmPanel
. Затем вы можете показать диалог с текстом, переданным через сообщение, вместе с кнопкой «ОК» и «Отмена». В зависимости от нажатой кнопки метод будет возвращать true или false обратно в веб-просмотр и разрешать выполнение остального кода javascript через обработчик завершения.
Проблема с WKWebView заключается в том, что она не отображает JavaScript Alert напрямую. Мне нужно добавить выше методы, чтобы показать оповещение в приложении. Не уверен, что вы подразумеваете под ---- Короткий ответ: пусть javascript обрабатывает его – User382
Также я не знаю, сколько кнопок у каждого оповещения есть и название кнопки. Поэтому я не могу жестко записать его, как показано выше.Как-то мне нужно получить эту информацию из этих функций или JavaScript. – User382
У предупреждения будет только одна кнопка, у подтверждения есть кнопки (ok & cancel), а в приглашении также будут только две кнопки вместе с текстовым полем. Примеры, приведенные выше, в значительной степени воссоздают диалоговые окна, которые ожидали бы, что они появятся в браузере, используя собственные средства управления ui. Как только пользователь нажимает на одну из кнопок, соответствующий ответ затем будет передан обработчикам в webview. –