欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開(kāi)發(fā)之用javascript調(diào)用oc方法而非url

 更新時(shí)間:2016年07月28日 11:45:40   作者:小小流浪的漢子  
本文說(shuō)的是非攔截URL進(jìn)行判斷,然后調(diào)用oc方法這種調(diào)用手段,所以不用討論說(shuō)為什么不用url這種方法,具體看需求,有需要的可以參考。

先來(lái)看看如何在項(xiàng)目中的webview上面點(diǎn)擊一個(gè)按鈕,就能達(dá)到調(diào)用oc代碼

上面的這個(gè)頁(yè)面是webview里面嵌套的一個(gè)項(xiàng)目的網(wǎng)頁(yè),打印訂單點(diǎn)擊之后(點(diǎn)擊事件是一個(gè)js方法),需要調(diào)用oc里面集成好的藍(lán)牙打印機(jī)功能,來(lái)完成打印。

所以這里只能用js代碼來(lái)直接調(diào)用oc代碼。

1.首先創(chuàng)建一個(gè)iOS類(lèi),因?yàn)檫@里一般都需要安卓端做一套,iOS端做一套,所以一般這樣命名以示區(qū)別

.h
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

/**
 * js調(diào)用oc里 main的代碼,需要借助這個(gè)協(xié)議才行
 */
@protocol JSObjectProtocol <JSExport>

@required
#pragma mark -js調(diào)用該oc方法,并且將jsonstring打印出來(lái)
- (void)print:(NSString *)jsonString;

@end


@interface iOS : NSObject<JSObjectProtocol>



@end
.m

@implementation iOS


#pragma mark -打印jsonString
- (void)print:(NSString *)jsonString{

  //打印的具體事件
}

2. 在網(wǎng)頁(yè)加載結(jié)束之后調(diào)用注冊(cè)iOS注冊(cè)

#pragma mark -網(wǎng)頁(yè)加載完畢,注冊(cè)ios對(duì)象,并且自動(dòng)檢查打印機(jī)是否自動(dòng)連接
-(void)webViewDidFinishLoad:(UIWebView *)webView{

  //首先創(chuàng)建JSContext 對(duì)象(此處通過(guò)當(dāng)前webView的鍵獲取到j(luò)scontext)
  //這個(gè)對(duì)象必須創(chuàng)建出來(lái),否則會(huì)無(wú)法調(diào)用到協(xié)議里的方法
  iOS *ios = [[iOS alloc] init];

  JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

  context[@"iOS"] = ios;

}

3. 在js的點(diǎn)擊事件里面類(lèi)似下面這樣調(diào)用即可(下面這段代碼寫(xiě)在對(duì)應(yīng)的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);
 }

以上就是關(guān)于iOS如何使用javascript代碼調(diào)用oc方法的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)IOS開(kāi)發(fā)有所幫助。希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論