iOS oc與web中js互相調(diào)用以及WKWebView的使用

最近因為項目催的緊悲靴,所以一些模塊是用web做的,里邊有一些和原生代碼的交互和互相調(diào)用偿凭,所以就研究了一下WKWebView的使用和與web的交互婶熬。這算是我研究完成后寫的記錄筆記吧,所以有些東西是人家的量窘,不是我的原創(chuàng)雇寇,望不要較真,我只是整理了一下蚌铜,加上一些自己的理解锨侯。好了,廢話不多說了冬殃,showTime!

iOS8之后,蘋果推出了新框架Wekkit缎脾,提供了替換UIWebView的組件WKWebView拔鹰。速度更快了,占用內(nèi)存更少了涣觉,而且和web交互也更方便了痴荐。
詳細的wkWebView的介紹,我就不多做贅述了官册。網(wǎng)上有橫多介紹的生兆。

一、創(chuàng)建WKWebView;

@property (nonatomic,retain)WKWebView *webView;創(chuàng)建為屬性

懶加載
-(WKWebView *)webView{
    
    if (!_webView) {
        
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.automaticallyAdjustsScrollViewInsets = NO;
        //為了與js交互膝宁,初始化 webview 的設置鸦难。
        WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
        
        // 設置偏好設置
        config.preferences = [[WKPreferences alloc] init];
        // 默認為0
        config.preferences.minimumFontSize = 10;
        // 默認認為YES
        config.preferences.javaScriptEnabled = YES;
        // 在iOS上默認為NO栖榨,表示不能自動通過窗口打開
        config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
        // web內(nèi)容處理池
        config.processPool = [[WKProcessPool alloc] init];
        // 通過JS與webview內(nèi)容交互
        config.userContentController = [[WKUserContentController alloc] init];
        // 注入JS對象名稱AppModel,當JS通過AppModel來調(diào)用時明刷,
        // 我們可以在WKScriptMessageHandler代理中接收到
        [config.userContentController addScriptMessageHandler:self name:@"OpenPage"];
        
        self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, kScreenHeight*(70/736.0f), kScreenWidth, kScreenHeight-kScreenHeight*(70/746.0f)-aScaleH(58))
                                          configuration:config];
        _webView.backgroundColor = [UIColor clearColor];
        _webView.scrollView.bounces = NO;
        _webView.scrollView.showsVerticalScrollIndicator = NO;
        _webView.scrollView.backgroundColor = [UIColor clearColor];
        [self.view addSubview: _webView];
        _webView.UIDelegate = self;
        _webView.navigationDelegate = self;
        
    }
 
    return _webView;
}

// 我們可以在WKScriptMessageHandler代理中接收到(上面已包含)
        [config.userContentController addScriptMessageHandler:self name:@"OpenPage"];

上面代碼中這一行是關鍵婴栽,其中“OpenPage”是注冊的關鍵詞,得和js中的統(tǒng)一辈末,這樣在下邊的代理中就可以識別關鍵詞愚争,實現(xiàn)js調(diào)用oc了

二、添加代理

<UIWebViewDelegate,WKScriptMessageHandler,WKUIDelegate,WKNavigationDelegate>

其中關鍵是WKScriptMessageHandler這個代理挤聘,其他的和交互聯(lián)系不大
三轰枝、實現(xiàn)代理
在代理中處理一些js對oc的操作


#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController
      didReceiveScriptMessage:(WKScriptMessage *)message {
    
    if ([message.name isEqualToString:@"OpenPage"]) {
//其中body中為傳過來的內(nèi)容,在這里邊和實現(xiàn)一些oc的操作
        NSLog(@"傳過來的值為===%@,%@", message,message.body);
}
}

在web中的JS代碼為

window.webkit.messageHandlers.OpenPage.postMessage(param);//param為傳的參數(shù)

四组去、oc調(diào)js的方法
其實這個最簡單

 NSString *jsStr = (這里是js的方法名)
        [self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {
            NSLog(@"%@----%@",result, error);
        }];
        

到這里就完了鞍陨,這是整理版 ,也是精簡版从隆。希望能幫到你诚撵。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市键闺,隨后出現(xiàn)的幾起案子寿烟,更是在濱河造成了極大的恐慌,老刑警劉巖辛燥,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筛武,死亡現(xiàn)場離奇詭異,居然都是意外死亡挎塌,警方通過查閱死者的電腦和手機徘六,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榴都,“玉大人待锈,你說我怎么就攤上這事$怨保” “怎么了炉擅?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阳惹。 經(jīng)常有香客問我谍失,道長,這世上最難降的妖魔是什么莹汤? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任快鱼,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘抹竹。我一直安慰自己线罕,他們只是感情好,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布窃判。 她就那樣靜靜地躺著钞楼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袄琳。 梳的紋絲不亂的頭發(fā)上询件,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音唆樊,去河邊找鬼宛琅。 笑死,一個胖子當著我的面吹牛逗旁,可吹牛的內(nèi)容都是我干的嘿辟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼片效,長吁一口氣:“原來是場噩夢啊……” “哼红伦!你這毒婦竟也來了?” 一聲冷哼從身側響起堤舒,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤色建,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舌缤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡某残,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年国撵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玻墅。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡介牙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澳厢,到底是詐尸還是另有隱情环础,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布剩拢,位于F島的核電站线得,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏徐伐。R本人自食惡果不足惜贯钩,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧角雷,春花似錦祸穷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吗坚,卻和暖如春揭措,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刻蚯。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工绊含, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炊汹。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓躬充,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讨便。 傳聞我的和親對象是個殘疾皇子充甚,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

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