iOS開發(fā)之用javascript調(diào)用oc方法而非url
先來看看如何在項目中的webview上面點擊一個按鈕,就能達到調(diào)用oc代碼
上面的這個頁面是webview里面嵌套的一個項目的網(wǎng)頁,打印訂單點擊之后(點擊事件是一個js方法),需要調(diào)用oc里面集成好的藍牙打印機功能,來完成打印。
所以這里只能用js代碼來直接調(diào)用oc代碼。
1.首先創(chuàng)建一個iOS類,因為這里一般都需要安卓端做一套,iOS端做一套,所以一般這樣命名以示區(qū)別
.h #import <Foundation/Foundation.h> #import <JavaScriptCore/JavaScriptCore.h> /** * js調(diào)用oc里 main的代碼,需要借助這個協(xié)議才行 */ @protocol JSObjectProtocol <JSExport> @required #pragma mark -js調(diào)用該oc方法,并且將jsonstring打印出來 - (void)print:(NSString *)jsonString; @end @interface iOS : NSObject<JSObjectProtocol> @end
.m @implementation iOS #pragma mark -打印jsonString - (void)print:(NSString *)jsonString{ //打印的具體事件 }
2. 在網(wǎng)頁加載結束之后調(diào)用注冊iOS注冊
#pragma mark -網(wǎng)頁加載完畢,注冊ios對象,并且自動檢查打印機是否自動連接 -(void)webViewDidFinishLoad:(UIWebView *)webView{ //首先創(chuàng)建JSContext 對象(此處通過當前webView的鍵獲取到jscontext) //這個對象必須創(chuàng)建出來,否則會無法調(diào)用到協(xié)議里的方法 iOS *ios = [[iOS alloc] init]; JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; context[@"iOS"] = ios; }
3. 在js的點擊事件里面類似下面這樣調(diào)用即可(下面這段代碼寫在對應的js代碼里面,而非你的oc代碼里面)
if (window["Android"] && window["Android"]["jsPrint"]) { var andPrint = window.Android.jsPrint(JSON.stringify(d)); } else if (window["iOS"] && window["iOS"]["print"]) { window["iOS"]["print"](JSON.stringify(d)); } else { this.alert.autoCloseTip("找不到打印方法!", 1000); }
以上就是關于iOS如何使用javascript代碼調(diào)用oc方法的全部內(nèi)容,希望對大家學習IOS開發(fā)有所幫助。希望大家多多支持腳本之家。
相關文章
iOS實現(xiàn)微信/QQ顯示最近拍攝圖片的功能實例代碼
如果你剛剛拍攝了圖片,在使用微信/QQ發(fā)生消息時會顯示“你可能要發(fā)送的圖片”,這個功能非常人性化,怎么實現(xiàn)的呢?下面小編給大家分享iOS實現(xiàn)微信/QQ顯示最近拍攝圖片的功能實例代碼,一起看看吧2017-03-03僅需幾行代碼實現(xiàn)方便易用的狀態(tài)欄指示器
本文通過僅僅數(shù)行代碼實現(xiàn)了非常方便易用的狀態(tài)欄指示器,比如微博項目的微博數(shù)提醒框,需要的朋友可以參考下2015-08-08