1. 程式人生 > >WKWebView 使用的一些踩坑記錄

WKWebView 使用的一些踩坑記錄

// WKwebVeiew  不能呼叫系統的長按複製 

處理方法

// 選擇CSS

NSString *css = @"body{-webkit-user-select:auto;-webkit-user-drag:auto;}";

// CSS選中樣式

NSMutableString *javascript = [NSMutableStringstring];

    [javascript appendString:@"var style = document.createElement('style');"];

    [javascript appendString:@"style.type = 'text/css';"

];

    [javascript appendFormat:@"var cssContent = document.createTextNode('%@');", css];

    [javascript appendString:@"style.appendChild(cssContent);"];

    [javascript appendString:@"document.body.appendChild(style);"];

// javascript注入

WKUserScript *noneSelectScript = [[WKUserScriptalloc] initWithSource

:javascript injectionTime:WKUserScriptInjectionTimeAtDocumentEndforMainFrameOnly:YES];

WKUserContentController *userContentController = [[WKUserContentControlleralloc] init];

    [userContentController addUserScript:noneSelectScript];

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration

alloc] init];

    configuration.userContentController = userContentController;

_webView = [[MCWKWebViewalloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds)) configuration:configuration];

_webView.scrollView.scrollEnabled = _scrollEnabled;

_webView.navigationDelegate = self;

_webView.UIDelegate = self;

    [self.viewaddSubview:_webView];

// WKwebVeiew 不能呼叫APPStore  

// 處理方式

NSString *requestString = navigationAction.request.URL.absoluteString;

NSLog(@"------requestString == %@",requestString);

if ([requestString containsString:@"itunes.apple.com"]) {

NSURL *url = navigationAction.request.URL;

UIApplication *app = [UIApplicationsharedApplication];

NSLog(@"url.absoluteString == %@", url.absoluteString);

if ([app canOpenURL:url]) {

            [app openURL:url];

            decisionHandler(WKNavigationActionPolicyCancel);

return;

        }

    }

    decisionHandler(WKNavigationActionPolicyAllow);

// WKwebView 不能呼叫打電話 

//處理方式

NSURL *URL = navigationAction.request.URL;
    NSString *scheme = [URL scheme];
    UIApplication *app = [UIApplication sharedApplication];
    // 打電話
    if ([scheme isEqualToString:@"tel"]) {
        if ([app canOpenURL:URL]) {
            [app openURL:URL];
            // 一定要加上這句,否則會開啟新頁面
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        } 
    }

/**

 *  可以指定配置物件、導航動作物件、window特性

 *

 *  @param webView    實現該代理的webview

 *  navigation 當前navigation

 */

-(WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures

/**

 *  頁面開始載入時呼叫

 *

 *  @param webView    實現該代理的webview

 *  @param navigation 當前navigation

 */

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation 

/**

 *  當內容開始返回時呼叫

 *

 *  @param webView    實現該代理的webview

 *  @param navigation 當前navigation

 */

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation 

/**

 *  頁面載入完成之後呼叫

 *

 *  @param webView    實現該代理的webview

 *  @param navigation 當前navigation

 */

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {

/**

 *  載入失敗時呼叫

 *

 *  @param webView    實現該代理的webview

 *  @param navigation 當前navigation

 *  @param error      錯誤

 */

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error

/**

 *  接收到伺服器跳轉請求之後呼叫

 *

 *  @param webView      實現該代理的webview

 *  @param navigation   當前navigation

 */

- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation 

/**

 *  在收到響應後,決定是否跳轉

 *

 *  @param webView            實現該代理的webview

 *  @param navigationResponse 當前navigation

 *  @param decisionHandler    是否跳轉block

 */

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler 

/**

 *  在傳送請求之前,決定是否跳轉

 *

 *  @param webView          實現該代理的webview

 *  @param navigationAction 當前navigation

 *  @param decisionHandler  是否調轉block

 */

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 

#pragma mark - WKUIDelegate

/**

 *  處理js裡的alert

 *

 */

- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler 

/**

 *  處理js裡的confirm

 */

- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler 

相關推薦

WKWebView 使用的一些記錄

// WKwebVeiew  不能呼叫系統的長按複製  處理方法 // 選擇CSS NSString *css = @"body{-webkit-user-select:auto;-webk

Apache部署flask的一些記錄(win64+python36)

基礎配置: 將一個Flask應用部署到本地的Windows伺服器上。作業系統是64位的,程式是基於Python 3.6開發的。 部署選擇: mod_wsgi + Apache 注意事項: 不能混用32位和64位的檔案 安裝Python時要選擇“Install

回顧vue開發spa(記錄

url 如果 after 本質 {} spa 不能 cnblogs 所有     使用vueJS開發前端頁面差不多也有大半多年了。由於項目後臺管理頁面最早都是使用JQ進行開發的,剛開始使用vue的時候,只能是直接在頁面裏面引入vueJS框架進行開發,期間把項目後臺的編輯頁面

Java ArrayList 記錄

至少 最後一個元素 get arraycopy add data his out pan   做編程的一個常識:不要在循環過程中刪除元素本身(至少是我個人的原則)。否則將發生不可預料的問題。   而最近,看到一個以前的同學寫的一段代碼就是在循環過程中刪除元素,我很是納悶啊。

react-記錄——頁面底部多出一倍高度的空白

idm 方法 left ++ dex code lock 高度 blog 掛載slider組件後頁面底部多出一倍高度的空白,如下: slider組件內容??: class Slider extends Component{ constructor(){ su

kibana 5.5 源碼編譯記錄

version echo regress ase https 記錄 arch 開發 iba 由於項目需要定制開發kibana,因此需要編譯kibana,在開發環境下運行。 註意:必須下載kibana 5.5的源碼才能正常編譯,下載release或者snapsho

java用毫秒數做日期計算的一個記錄

日期計算 封裝 blog 由於 參數 記錄 pre next 計算 錯誤示例: Date today = new Date(); Date nextMonth = new Date(today.getTime() + 30* 1000*60*60*24); printl

webAPP記錄

creat radi item nac api margin inter 側滑菜單 bind 最近公司突然給我們下了一個任務 一個星期要做出一個系統網站 外加手機app 2個同事負責 web開發 我負責手機app 的開發 今天終於初級版本做完了,記錄一

Git記錄

init git init mark ssh 工作 壓力 慢慢 and rap 前言:可能是一年或者兩年之前就聽說過了GitHub的大名,udacity的課程也上了一些,但是自己確實沒有真正用心的來學習git,現在面臨找工作的壓力,下定決心一定要將自己的項目都統一整理到gi

CentOS7.4安裝MySQL記錄

pre table tro end warning 更新 file auth lock CentOS7.4安裝MySQL踩坑記錄 time: 2018.3.19 CentOS7.4安裝MySQL時網上的文檔雖然多但是不靠譜的也多, 可能因為版本與時間的問題, 所以記錄下自

IDFA記錄

二次 tor body apps 越獄 廣告 數據遷移 開會 flight IDFA踩坑記錄: 1.iOS10.0 以下,即使打開“限制廣告跟蹤”,依然可以讀取idfa; 2.打開“限制廣告跟蹤”,然後再關閉“限制廣告跟蹤”,idfa會改變; 3.越獄機器安裝開發證書打的包

axios記錄+攔截器使用+vue cli代理跨域proxy

dex ios文檔 exports 地址 必須 主頁 mon 空白 space 1、小小的提一下vue cli腳手架前端調後端數據接口時候的本地代理跨域問題,如我在本地localhost訪問接口http://40.00.100.100:3002/是要跨域的,相當於瀏覽器設置

使用Windows下的git工具往github上傳代碼 記錄

from push 進行 其中 一個 access HA png 關聯 使用Windows下的git工具往github上傳代碼 踩坑記錄 背景 由於以前接觸的項目都是通過svn進行版本控制,現在公司項目使用git,加上自己平時有一個練手小項目,趁著周末試著把項目上傳到自己

Ajax 請求時後臺跳轉 前端頁面不更新記錄

style 返回 url direct edi pos 通過 繼續 檢查 踩坑環境:前端:Ajax post請求,json類型數據;後端 C#+MVC,前後端正常通信,但是當後臺驗證權限不通過時會RedirectToAction跳轉到登錄頁,結果現象是後臺正常執行登錄頁的渲

canvas 記錄

adr set base64 composite 瀏覽器 圖片 IT log UNC 一、繪制一個帶有多張圖片和文字的canvas。要求將一張矩形的圖片,放置進去顯示為圓角矩形的圖片   解決方案,先把圖片處理成圓角矩形的樣子,再放進去就可以了   繪制圓角矩形圖片的解決方

Django學習記錄

drivers windows IV TE 端口號 system32 localhost bsp oca 這是個補坑過程的記錄。可補充。 1、啟動django的時候報錯 原因:端口被酷狗占用 解決辦法:指定端口號 2、運行啟動時報錯 解決辦法將C:\Windo

【OPNsense】18.1記錄之一:接口、DHCP Service、DHCP RELAY

size image nag ges 記錄 問題 dhcp服務 之前 接口 在進行OPNsense的DHCP中繼測試時候發現,DHCP中繼無法啟動,提示DHCP服務在運行。如下圖: 經過排查,發現在Interfaces存在一個關閉狀態的接口,啟用之後再檢查

kafka安裝和使用遠程代碼進行訪問 ---附記錄

from name trap 谷歌 tar.gz ps命令 生產者 config strings kafka安裝和使用java連接遠程服務器進行消息的生成與消費 首先要使用kafka,要有jdk和zookeeper的環境 本文在阿裏雲的centos7環境上進行 jdk版本選

webpack記錄(一)

有著 安裝webpack package 頁面 如圖所示 ins 部分 二次 令行 博客還是要簡單記錄一下的,美劇看完了,於是決定學習,想起來webpack還沒學啊,大物就先放一放,然後就開始找教程,慕課上某免費視頻。 那webpack是啥呢? 如圖所示: 是不

Struts2返回json格式資料記錄

事件起因 昨天提測修改凍結/解凍銀行卡樣式的功能,微姐測試過程中發現呼叫ajax請求耗時過長,今天來排查,發現瀏覽器請求/finance/ajax/freeze/ajaxGetShopLists時,對應的後端方法getShopList()莫名其妙地執行了兩遍,並且返回給瀏覽器的Json字串如下: