• iOS Webview 实现修改javascript confirm 和 alert


    贴代码:

    @interface UIWebView (JavaScriptAlert)  
    -(void) webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(id)frame;  
    - (BOOL)webView:(UIWebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(id)frame;  
    @end  
      
    @implementation UIWebView (JavaScriptAlert)  
      
    - (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(id)frame {  
        UIAlertView* customAlert = [[UIAlertView alloc] initWithTitle:@"助手提示" message:message delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];  
        [customAlert show];  
    }  
    static BOOL diagStat = NO;  
    static NSInteger bIdx = -1;  
    - (BOOL)webView:(UIWebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(id)frame {  
        UIAlertView *confirmDiag = [[UIAlertView alloc] initWithTitle:@"助手提示"  
                                                              message:message  
                                                             delegate:self  
                                                    cancelButtonTitle:@"取消"  
                                                    otherButtonTitles:@"确定", nil nil];  
          
        [confirmDiag show];  
        bIdx = -1;  
          
        while (bIdx==-1) {  
            //[NSThread sleepForTimeInterval:0.2];  
            [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1f]];  
        }  
        if (bIdx == 0){//取消;  
            diagStat = NO;  
        }  
        else if (bIdx == 1) {//确定;  
            diagStat = YES;  
        }  
        return diagStat;  
    }  
      
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{  
        bIdx = buttonIndex;  
    }  
      
    @end

    关于WKWebView:

    之前用WebView装载一个网页时,弹出Alert时会显示网址,由于不想把网址暴露给用户这样显示就不是很友好了。UIWebView文档内没有找到可以捕获这类信息的API。GOOGLE了下发现了WKWebView组件,WKWebView是IOS8新推出的组件,目的是给出一个新的高性能的 Web View 解决方案,摆脱过去 UIWebView 的老旧笨重特别是内存占用量巨大的问题。以下为示例代码:

    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
    //
    //  ViewController.swift
    //  KenWKWebView
    //
    //  Created by KenNgai on 10/10/15.
    //  Copyright © 2015 IT. All rights reserved.
    //
     
    import UIKit
    import WebKit //导入WebKit  WKWebView应该是用Webkit内核
     
    class ViewControllerUIViewController,WKNavigationDelegate,WKUIDelegate {
     
        var wkBrowser:WKWebView!
         
        override func viewDidLoad() {
            super.viewDidLoad()
            self.wkBrowser WKWebView(frameself.view.frame)
            //self.wkBrowser.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!))
            let html "<html><title>Dialog</title><style type='text/css'>body{font-size:60px}</style><script type='text/javascript'>function myconfirm(){if(confirm('Star it?')){alert('Done')}}</script><body><a href="javascript:alert('Just Alert')" >Alert</a><br /><a href="javascript:myconfirm()">Logout</a></body></html>"
            self.wkBrowser.loadHTMLString(htmlbaseURLnil)
            self.wkBrowser.navigationDelegate self
            self.wkBrowser.UIDelegate self
            self.view.addSubview(wkBrowser)
        }
         
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
     
    }
     
    //捕捉异常信息
    private typealias wkNavigationDelegate ViewController
    extension wkNavigationDelegate {
        func webView(webViewWKWebViewdidFailNavigation navigationWKNavigation!, withError errorNSError) {
            NSLog(error.debugDescription)
        }
         
        func webView(webViewWKWebViewdidFailProvisionalNavigation navigationWKNavigation!, withError errorNSError) {
            NSLog(error.debugDescription)
        }
    }
     
    private typealias wkUIDelegate ViewController
    extension wkUIDelegate {
        //HTML页面Alert出内容
        func webView(webViewWKWebViewrunJavaScriptAlertPanelWithMessage messageStringinitiatedByFrame frameWKFrameInfocompletionHandler: () -> Void) {
            let ac UIAlertController(titlewebView.titlemessagemessagepreferredStyleUIAlertControllerStyle.Alert)
            ac.addAction(UIAlertAction(title"Ok"styleUIAlertActionStyle.Cancelhandler: { (a) -> Void in
                completionHandler()
            }))
             
            self.presentViewController(acanimatedtruecompletionnil)
        }
         
        //HTML页面弹出Confirm时调用此方法
        func webView(webViewWKWebViewrunJavaScriptConfirmPanelWithMessage messageStringinitiatedByFrame frameWKFrameInfocompletionHandler: (Bool) -> Void) {
            let ac UIAlertController(titlewebView.titlemessagemessagepreferredStyleUIAlertControllerStyle.Alert)
            ac.addAction(UIAlertAction(title"Ok"styleUIAlertActionStyle.Defaulthandler:
                { (ac) -> Void in
                    completionHandler(true)  //按确定的时候传true
            }))
             
            ac.addAction(UIAlertAction(title"Cancel"styleUIAlertActionStyle.Cancelhandler:
                { (ac) -> Void in
                    completionHandler(false)  //取消传false
            }))
             
            self.presentViewController(acanimatedtruecompletionnil)
        }
    }

     

    如果你访问的页面的协议是https那么要在info.list同添加以下Key:

    <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
        </dict>

    具体可参考:https://lvwenhan.com/ios/460.html

    链接:

    iOS Webview 实现修改javascript confirm 和 alert

    UIWebView 屏蔽 alert警告框

    WKWebView捕获HTML弹出的Alert和Confirm

  • 相关阅读:
    Java使用AES算法
    Python中使用AES算法(解决Python2.x和3.x下运行不兼容问题)
    关于递归
    zabbix文档3.4
    CentOS-7.3.1611编译安装 Nginx-1.12.1+mysql-5.7.19+PHP-7.1.8+zabbix-3.4.1
    搭建zabbix服务器监控
    php编译安装过程中遇到问题
    springboot 获取控制器参数的几种方式
    spring boot 全局异常处理及自定义异常类
    Java 中的异常和处理详解
  • 原文地址:https://www.cnblogs.com/On1Key/p/5848422.html
Copyright © 2020-2023  润新知