zoukankan      html  css  js  c++  java
  • iOS开发 WKWebView下js的alert(),confirm(),prompt()方法无法正常执行

    1、原因说明

    • 由于安全机制,WKWebView默认对JavaScript下alert(),confirm(),prompt())做了拦截,如果要想正常使用,需要实现WKWebView的三个代理方法.

    2、解决办法

    • 2.1 解决alert方法

    - (void)webView:(WKWebView *)webView 
    runJavaScriptAlertPanelWithMessage:(NSString *)message 
    initiatedByFrame:(WKFrameInfo *)frame 
    completionHandler:(void (^)(void))completionHandler {
    
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:message?:@"" preferredStyle:UIAlertControllerStyleAlert];
    
        [alertController addAction:([UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
            completionHandler();
    
        }])];
    
        [self presentViewController:alertController animated:YES completion:nil];
    
    }
    
    • 2.2 解决confirm

    - (void)webView:(WKWebView *)webView 
    runJavaScriptConfirmPanelWithMessage:(NSString *)message  
    initiatedByFrame:(WKFrameInfo *)frame 
    completionHandler:(void (^)(BOOL))completionHandler {
    
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:message?:@"" preferredStyle:UIAlertControllerStyleAlert];
    
        [alertController addAction:([UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    
            completionHandler(NO);
    
        }])];
    
        [alertController addAction:([UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
            completionHandler(YES);
    
        }])];
    
        [self presentViewController:alertController animated:YES completion:nil];
    
    }
    
    
    • 2.3 解决prompt

    - (void)webView:(WKWebView *)webView 
    runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt 
    defaultText:(NSString *)defaultText 
    initiatedByFrame:(WKFrameInfo *)frame 
    completionHandler:(void (^)(NSString * _Nullable))completionHandler {
    
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:prompt message:@"" preferredStyle:UIAlertControllerStyleAlert];
    
        [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
    
            textField.text = defaultText;
    
        }];
    
        [alertController addAction:([UIAlertAction actionWithTitle:@"完成" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
            completionHandler(alertController.textFields[0].text?:@"");
    
        }])];
    
        [self presentViewController:alertController animated:YES completion:nil];
    }
    
  • 相关阅读:
    GAN对抗神经网络(原理解析)
    Wasserstein distance(EM距离)
    浅谈KL散度
    深度学习中 Batch Normalization是什么
    Batch Normalization的正确打开方式
    对于梯度消失和梯度爆炸的理解
    [转贴]loadrunner 场景设计-添加Unix、Linux Resources计数器
    Volley(四)—— ImageLoader & NetworkImageView
    SQL单表查询
    ifconfig命令详解
  • 原文地址:https://www.cnblogs.com/CH520/p/11968408.html
Copyright © 2011-2022 走看看