iOS OC和JS互調(diào)

最近朋友讓做一個(gè)webApp和原生的代碼互調(diào),就順便查了一下資料 總結(jié)分享一個(gè)

從iOS7開始 蘋果公布了JavaScriptCore.framework 它使得JS與OC的交互更加方便了。

下面我們就簡(jiǎn)單了解一下這個(gè)框架

首先我導(dǎo)入framework

方法如下

點(diǎn)擊Linked Frameworks and Libraries 的添加后 選擇 JavaScriptCore.framework

選中JavaScriptCore.framework后 點(diǎn)擊右下角Add 添加完成

好 創(chuàng)建完成之后我們導(dǎo)入一下頭文件

[objc]view plaincopy

#import?

點(diǎn)進(jìn)去 會(huì)看到如下幾個(gè)方法

#import"JSContext.h"

#import"JSValue.h"

#import"JSManagedValue.h"

#import"JSVirtualMachine.h"

#import"JSExport.h"

這些方法我們等會(huì)再細(xì)講

下來(lái)我們創(chuàng)建一個(gè)UIWebView ?用來(lái)測(cè)試

創(chuàng)建UIWebView

[objc]view plaincopy

UIWebView*myWebView;

初始化,添加,打開網(wǎng)址

[objc]view plaincopy

//初始化webview

myWebView=[[UIWebViewalloc]initWithFrame:CGRectMake(0,22,?[UIScreenmainScreen].bounds.size.width,?[UIScreenmainScreen].bounds.size.height-22)];

myWebView.delegate=self;

//添加webview到當(dāng)前viewcontroller的view上

[self.viewaddSubview:myWebView];

//網(wǎng)址

NSString*httpStr=@"https://www.baidu.com";

NSURL*httpUrl=[NSURLURLWithString:httpStr];

NSURLRequest*httpRequest=[NSURLRequestrequestWithURL:httpUrl];

[myWebViewloadRequest:httpRequest];

運(yùn)行效果如下

下面我們來(lái)實(shí)現(xiàn)UIWebView的幾個(gè)代理方法

首先我們看下它的代理方法

[objc]view plaincopy

@protocolUIWebViewDelegate?

@optional

-?(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UIWebViewNavigationType)navigationType;

-?(void)webViewDidStartLoad:(UIWebView*)webView;

-?(void)webViewDidFinishLoad:(UIWebView*)webView;

-?(void)webView:(UIWebView*)webViewdidFailLoadWithError:(NSError*)error;

@end

每個(gè)方法的作用等會(huì)在帶里面做注釋

首先我們添加協(xié)議

[objc]view plaincopy

@interfaceViewController?()

實(shí)現(xiàn)代理方法

[objc]view plaincopy

#pragma?mark?--webViewDelegate

-(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UIWebViewNavigationType)navigationType

{

//網(wǎng)頁(yè)加載之前會(huì)調(diào)用此方法

//retrun?YES?表示正常加載網(wǎng)頁(yè)?返回NO?將停止網(wǎng)頁(yè)加載

returnYES;

}

-(void)webViewDidStartLoad:(UIWebView*)webView

{

//開始加載網(wǎng)頁(yè)調(diào)用此方法

}

-(void)webViewDidFinishLoad:(UIWebView*)webView

{

//網(wǎng)頁(yè)加載完成調(diào)用此方法

}

-(void)webView:(UIWebView*)webViewdidFailLoadWithError:(NSError*)error

{

//網(wǎng)頁(yè)加載失敗?調(diào)用此方法

}

每個(gè)方法是什么時(shí)候調(diào)用都在注釋里面

下來(lái)我們先嘗試用oc調(diào)用一下js方法

[objc]view plaincopy

-(void)webViewDidFinishLoad:(UIWebView*)webView

{

//網(wǎng)頁(yè)加載完成調(diào)用此方法

//首先創(chuàng)建JSContext?對(duì)象(此處通過(guò)當(dāng)前webView的鍵獲取到j(luò)scontext)

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

NSString*alertJS=@"alert('test?js?OC')";//準(zhǔn)備執(zhí)行的js代碼

[contextevaluateScript:alertJS];//通過(guò)oc方法調(diào)用js的alert

}

執(zhí)行效果如下:

好了,我們已經(jīng)實(shí)現(xiàn)了iOS 調(diào)用js

原文地址:http://blog.csdn.net/lwjok2007/article/details/47058101

iOS和JS互調(diào)(二):http://blog.csdn.net/lwjok2007/article/details/47058795

IOS和JS通過(guò)橋接的方式進(jìn)行互調(diào):http://www.cocoachina.com/ios/20150814/12985.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 從iOS7開始 蘋果公布了JavaScriptCore.fr...
    真愛要有你才完美閱讀 280評(píng)論 0 0
  • 隨著H5技術(shù)的興起,在iOS開發(fā)過(guò)程中,難免會(huì)遇到原生應(yīng)用需要和H5頁(yè)面交互的問(wèn)題。其中會(huì)涉及方法調(diào)用及參數(shù)傳值等...
    Chris_js閱讀 3,234評(píng)論 1 8
  • http://blog.csdn.net/y550918116j/article/details/49619847...
    F麥子閱讀 990評(píng)論 2 0
  • 一、簡(jiǎn)介 近兩年隨著HTML5的迅速發(fā)展與日趨成熟,越來(lái)越多的移動(dòng)開發(fā)者選擇使用HTML5來(lái)進(jìn)行混合開發(fā),不僅節(jié)約...
    RainyGY閱讀 2,002評(píng)論 1 12
  • 跟原生開發(fā)相比,H5的開發(fā)相對(duì)來(lái)一個(gè)成熟的框架和團(tuán)隊(duì)來(lái)講在開發(fā)速度和開發(fā)效率上有著比原生很大的優(yōu)勢(shì),至少不用等待審...
    大沖哥閱讀 1,900評(píng)論 0 7

友情鏈接更多精彩內(nèi)容