使用WKWebView的一些注意事項(xiàng)

最近在項(xiàng)目里使用WKWebView碰到的一些問題岗憋,在這里跟大家分享下經(jīng)驗(yàn)洋措。

1、修改userAgent

// 修改userAgent 不管iOS9以上還是以下都可以
- (void)webviewSetUserAgent{
    
    UIWebView *webView = [UIWebView new];
    NSString *oldAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    NSString *newAgent = [oldAgent stringByAppendingString:@"你需要添加的String"];
    NSDictionary *dict = @{@"UserAgent":newAgent};
    [[NSUserDefaults standardUserDefaults] registerDefaults:dict];
}

2淌铐、禁止長(zhǎng)按出現(xiàn)菜單

    WKUserContentController *userContentController = [[WKUserContentController alloc] init];
    // 禁止長(zhǎng)按出現(xiàn)菜單
    NSString *source = @"var style = document.createElement('style'); \
    style.type = 'text/css'; \
    style.innerText = '*:not(input):not(textarea) { -webkit-user-select: none; -webkit-touch-callout: none; }'; \
    var head = document.getElementsByTagName('head')[0];\
    head.appendChild(style);";
    WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
    [userContentController addUserScript:script];

3肺然、禁止放大縮小

// 頁(yè)面加載完成之后調(diào)用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    // 禁止放大縮小
    NSString *js = @"var script = document.createElement('meta');"
    "script.name = 'viewport';"
    "script.content=\"width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no\";"
    "document.getElementsByTagName('head')[0].appendChild(script);";
    [webView evaluateJavaScript:js completionHandler:nil];
}

4、webview加載h5打開微信腿准、支付寶客戶端并返回app

這里需要向微信申請(qǐng)h5支付际起,并設(shè)置一些參數(shù)
常見的問題看這里

// webview加載url(微信、支付寶)
NSMutableURLRequest *request;
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
// xxxx是自己設(shè)置的app URL Scheme
[request setValue:@"xxxx://" forHTTPHeaderField:@"Referer"];
[self.webView loadRequest:request];




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

    if ([navigationAction.request.URL.absoluteString containsString:@"weixin://"]) {// 微信
        decisionHandler(WKNavigationActionPolicyCancel);
        [self cancelClick];//回到選項(xiàng)頁(yè)
        // wkwebview要這樣解決
         [[UIApplication sharedApplication] openURL:navigationAction.request.URL];
 
        }
    } else if ([navigationAction.request.URL.absoluteString containsString:@"alipay://"]){// 支付寶
        decisionHandler(WKNavigationActionPolicyCancel);

// 支付寶這里是URLDecode編碼了吐葱,解碼后發(fā)現(xiàn)有個(gè)參數(shù)fromAppUrlScheme:alipays,將alipays換成自己的app URL Scheme
        NSString *decodedString = [self URLDecodedString:navigationAction.request.URL.absoluteString];
        if ([decodedString containsString:@"fromAppUrlScheme"]) {
// 去掉alipay://alipayclient/?前綴街望,因?yàn)楹竺婢幋a會(huì)導(dǎo)致錯(cuò)誤(這里先去掉,編碼后在加上)
            NSString *subStr = [decodedString stringByReplacingOccurrencesOfString:@"alipay://alipayclient/?" withString:@""];
// xxxx是自己設(shè)置的app URL Scheme
            NSString *repStr = [subStr stringByReplacingOccurrencesOfString:@"alipays" withString:@"xxxx"];
            NSString *encodedString = [NSString stringWithFormat:@"alipay://alipayclient/?%@",[self URLEncodedString:repStr]];
            
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:encodedString]];
       
            }
        } else {
            [[UIApplication sharedApplication] openURL:navigationAction.request.URL];
      
            }
        }
        
    } else {
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}


// 編碼
- (NSString *)URLEncodedString:(NSString *)str{
    NSString *encodedString = (NSString *)
    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)str,
                                                              NULL,
                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                              kCFStringEncodingUTF8));
    return encodedString;
}

// 解碼
- (NSString *)URLDecodedString:(NSString *)str{
    NSString *decodedString=(__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)str, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    
    return decodedString;
}

參考:http://www.reibang.com/p/90db7dfb075c

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弟跑,一起剝皮案震驚了整個(gè)濱河市灾前,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孟辑,老刑警劉巖哎甲,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異饲嗽,居然都是意外死亡炭玫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門貌虾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吞加,“玉大人,你說(shuō)我怎么就攤上這事尽狠∠魏” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵袄膏,是天一觀的道長(zhǎng)践图。 經(jīng)常有香客問我,道長(zhǎng)哩陕,這世上最難降的妖魔是什么平项? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮悍及,結(jié)果婚禮上闽瓢,老公的妹妹穿的比我還像新娘。我一直安慰自己扣讼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布缨叫。 她就那樣靜靜地躺著椭符,像睡著了一般荔燎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上座享,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音盯捌,去河邊找鬼。 笑死瓶籽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竖独。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼种蘸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坦辟!你這毒婦竟也來(lái)了滨彻?” 一聲冷哼從身側(cè)響起辜羊,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤山橄,失蹤者是張志新(化名)和其女友劉穎航棱,沒想到半個(gè)月后祠墅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了免姿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饼酿。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出故俐,到底是詐尸還是另有隱情想鹰,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布药版,位于F島的核電站辑舷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏槽片。R本人自食惡果不足惜何缓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望还栓。 院中可真熱鬧碌廓,春花似錦、人聲如沸剩盒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辽聊。三九已至纪挎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跟匆,已是汗流浹背异袄。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玛臂,地道東北人烤蜕。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像迹冤,于是被迫代替她去往敵國(guó)和親玖绿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評(píng)論 25 707
  • iOS 的 Cookie 存取 https://juejin.im/entry/58d4c4cc44d904006...
    Farmers閱讀 5,928評(píng)論 0 16
  • 夜已經(jīng)很深了叁巨,熱鬧繁華的大都市依舊喧囂,蕭雅漫無(wú)目的地沿著街道走著呐籽,初春的天氣锋勺,乍暖還寒,一陣風(fēng)吹來(lái)狡蝶,她不禁打...
    穿越夢(mèng)想遇見你閱讀 667評(píng)論 0 0
  • 漢代許慎《說(shuō)文解字》中說(shuō)庶橱,“儒,柔也”贪惹。一個(gè)“柔”字苏章,切中要義,味道全出。宋詞專家葉嘉瑩先生在一檔節(jié)目中就特地提...
    流景景閱讀 1,761評(píng)論 0 0
  • 我決定來(lái)一場(chǎng)遠(yuǎn)行 在那個(gè)夢(mèng)濕的清晨 我收拾起行囊 卻發(fā)現(xiàn)囊中羞澀 可即便如此 我也不會(huì)回頭 那樣只會(huì)令別人更加恥笑...
    十月城池閱讀 318評(píng)論 5 0