ios,WebView,WKWebView

UIWebView

webview加載url地址或更換url

代碼寫(xiě)到哪里都行

        [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"xxxxx"]]];

webview中的圖片適配

寫(xiě)在- (void)webViewDidFinishLoad:(UIWebView *)webView {代理里面

NSString *jsStr = [NSString stringWithFormat:
                       @"var script = document.createElement('script');"
                       "script.type = 'text/javascript';"
                       "script.text = \"function ResizeImages() { "
                       "var myimg,oldwidth,oldheight;"
                       "var maxwidth=%f;" //縮放系數(shù)
                       "for(var i=0;i <document.images.length;i++){"
                       "myimg = document.images[i];"
                       "oldwidth = myimg.width;"
                       "oldheight = myimg.height;"
                       "myimg.style.width = maxwidth+'px';"
                       "myimg.style.height = (oldheight * (maxwidth/oldwidth))+'px';"
                       "}"
                       "}\";"
                       "document.getElementsByTagName('head')[0].appendChild(script);",SCREEN_WIDTH-20];
    
    [webView stringByEvaluatingJavaScriptFromString:jsStr];
    
    [webView stringByEvaluatingJavaScriptFromString:@"ResizeImages();"];

留白

http://www.itdecent.cn/p/daa53aa44700


webview中網(wǎng)址監(jiān)聽(tīng),和點(diǎn)擊監(jiān)聽(tīng)

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
  //點(diǎn)擊事件
//    if ([request.mainDocumentURL.relativePath isEqualToString:@"xxxxxx"]) {
//        return false;  //執(zhí)行本地代碼,返回false不讓網(wǎng)頁(yè)讀取網(wǎng)絡(luò)資源
//
//    }

//網(wǎng)址監(jiān)聽(tīng)
   //    //1.截取到當(dāng)前地址
        NSString *url1=request.URL.absoluteString;
        //2.做你想做的操作
        if ([url1 isEqualToString:@"http://xxxxx"]) {
            
            
         
            
           // WFXXXXXX *vc=[[XXXXXXX alloc]init];
          //  [self.navigationController pushViewController:vc animated:YES];
            
            return NO;
        }
    
    
    return true;   //為yes加載內(nèi)容,否則不


}

wkWebView

查看WKNavigationDelegate注釋
查看WKUIDelegate注釋
獲取title
WKWebView有個(gè)title屬性,直接取出來(lái)就行了,用的是kvo屬性監(jiān)聽(tīng)。

_wkWebView.UIDelegate = self;
[_wkWebView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];
//WkWebView的 回調(diào)
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
 if ([keyPath isEqualToString:@"title"]) {
        if (object == self.wkWebView) {
        self.title = self.wkWebView.title;
         } else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
         }
    } else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    
    }
    
}

3

- (void)dealloc{
    [_wkWebView removeObserver:self forKeyPath:@"title"];
}

支持https

把url加個(gè)判斷 區(qū)分https還是http
http://www.itdecent.cn/p/31d226a044dc

字體大小

- (void)webViewDidFinishLoad:(UIWebView*)webView {
    ///250是字體的大小,根據(jù)自己的需求修改
    NSString* fontSize = [NSString stringWithFormat:@"%d",250];
    
    fontSize = [fontSize stringByAppendingFormat:@"%@",@"%"];;
    
    NSString* str = [NSString stringWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%@'",fontSize];
    

    [self.webView stringByEvaluatingJavaScriptFromString:str];
    
}

WebView不顯示JS的alert彈窗的解決辦法

換成WKWebView

WKWebView不顯示JS的alert彈窗的解決辦法

self.webView.UIDelegate = self;

#pragma mark -- WKUIDelegate
// 顯示一個(gè)按鈕。點(diǎn)擊后調(diào)用completionHandler回調(diào)
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler{
    
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message message:nil preferredStyle:UIAlertControllerStyleAlert];
    [alertController addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

        completionHandler();
    }]];
    [self presentViewController:alertController animated:YES completion:nil];
}

// 顯示兩個(gè)按鈕,通過(guò)completionHandler回調(diào)判斷用戶(hù)點(diǎn)擊的確定還是取消按鈕
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler{
    
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message message:nil preferredStyle:UIAlertControllerStyleAlert];
    [alertController addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
        completionHandler(YES);
    }]];
    [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        
        completionHandler(NO);
    }]];
    [self presentViewController:alertController animated:YES completion:nil];
    
}

// 顯示一個(gè)帶有輸入框和一個(gè)確定按鈕的,通過(guò)completionHandler回調(diào)用戶(hù)輸入的內(nèi)容
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable))completionHandler{
    
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:nil preferredStyle:UIAlertControllerStyleAlert];
    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        
    }];
    [alertController addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
        completionHandler(alertController.textFields.lastObject.text);
    }]];
    [self presentViewController:alertController animated:YES completion:nil];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容