を処理する方法を私はそれを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 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);
}
例
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);
}
プロンプトの確認例ボタンのクリックをjavascriptに戻す方法の例を示します。 JavaScriptをコールバックにしたい場合は、WKScriptMessageHandler
からサブクラス化してスクリプトハンドラを登録する必要があります。ここには基本的な例がありますhttps://forums.xamarin.com/discussion/41777/wkwebview-caching-not-working
ちょうどメモとしてUIAlertView
は推奨されていません。あなたは代わりにUIAlertController
を使い始めたいと思うかもしれません。 https://stackoverflow.com/a/32690371/5606840を参照してください。 View Controllerにアクセスしてアラートを表示する場合は、初期化時にWKUIDelegate
クラスに渡します。
編集
のWebViewのJavaScriptのスレッドを一時停止し、RunJavaScriptAlertPanel
を呼び出します
alert('This is an alert');
JavaScriptで結果を処理する方法に展開します。 OKボタンがクリックされると、webview内のcompletionHandlerがコールバックされ、残りのjavascriptコードが実行されます。 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
}
アラートの例のように、それはRunJavaScriptConfirmPanel
を呼び出します。 OKとCancelボタンとともに、メッセージを通したテキストを含むダイアログを表示することができます。クリックされたボタンに応じて、メソッドはtrueまたはfalseをWebviewにプッシュし、残りのJavaScriptコードを補完ハンドラを介して実行できるようにします。
WKWebViewの問題点は、JavaScriptアラートが直接表示されないことです。上記のメソッドを追加して、アプリケーションにアラートを表示する必要があります。あなたが何を意味するかわからない短い答えは、javascriptでそれを処理させてください – User382
また、私は各アラートが持つボタンの数とボタンのタイトルがわかりません。だから私は上記のようにハードコードすることはできません。どういうわけか、これらの機能やJavaScriptからその情報を取得する必要があります – User382
アラートにはボタンが1つしかありません。確認にはボタンがあります(okとキャンセル)。プロンプトには2つのボタンとテキストボックスしかありません。上記の例は、ネイティブUIコントロールを使用してブラウザに表示されるように、ダイアログを再作成します。ユーザがボタンの1つをクリックすると、適切な応答がWebビューのハンドラに戻されます。 –