iOS-js與iOS的交互(基于WKWebViewJavascriptBridge第三方)

? 后天就要去北京出差了,據(jù)說那邊的項目主要是與網(wǎng)頁交互,所以就簡單的研究了一下js與iOS的交互。

其交互方式有很多種

一、native(app)通過UIWebView的代理方法攔截url scheme判斷是否是我們需要攔截處理的url及其所對應(yīng)的要處理的邏輯(可以實現(xiàn)對網(wǎng)頁的返回、前景、刷新),比較通用和簡單。

self.webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];

self.webView.delegate = self;

[self.webView setUserInteractionEnabled:YES];//是否支持交互

[self.webView setOpaque:NO];//opaque是不透明的意思

[self.webView setScalesPageToFit:YES];//自動縮放以適應(yīng)屏幕

[self.view addSubview:self.webView];


if (sender.tag == 101) {

// 返回(點擊頁面才會有返回)

[self.mWebView goBack];

}else if (sender.tag == 102) {

// 前進(jìn)(點擊過的頁面)

[self.mWebView goForward];

}else {

// 刷新頁面

[self.mWebView reload];

}

二、iOS7之后出了JavaScriptCore.framework用于與JS交互,通過JSContext調(diào)用JS代碼的方法:

1、直接調(diào)用JS代碼

2、在ObjC中通過JSContext注入模型,然后調(diào)用模型的方法

通過evaluateScript:方法就可以執(zhí)行JS代碼

三、React Native (不是很了解,只知道是Facebook的,能編譯很多的語音,兼容性很強,可移植也很強,有很多很好的原生控件,有興趣的朋友可以了解一下)

四、WebViewJavascriptBridge(第三方)是基于方式一封裝的(主要是兩個回調(diào)函數(shù))。

在iOS端:1.self.bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView];

鏈接iOS與js,self.webView就是展示你用來顯示需要交換頁面的UIWebView

2.[self.bridge registerHandler:@"testJavascriptHandler" handler:^(id data, WVJBResponseCallback responseCallback) {

NSLog(@"ObjC Echo called with: %@", data);

// 反饋給JS

responseCallback(data);

}];

// 在JS中如果調(diào)用了bridge.send(),那么將觸發(fā)OC端_bridge初始化方法中的回調(diào)。

// 在JS中調(diào)用了bridge.callHandler('testJavascriptHandler'),它將觸發(fā)OC端注冊的同名方法

// oc 同理

// JS主動調(diào)用OjbC的方法

// 這是JS會調(diào)用ObjC Echo方法,這是OC注冊給JS調(diào)用的

// JS需要回調(diào),當(dāng)然JS也可以傳參數(shù)過來。data就是JS所傳的參數(shù),不一定需要傳

// OC端通過responseCallback回調(diào)JS端,JS就可以得到所需要的數(shù)據(jù)

3.[self.bridge callHandler:@"sayHello" data:@{@"hello": @"你好"} responseCallback:^(id responseData) {

NSLog(@"回調(diào)結(jié)果: %@", responseData);

}];

直接調(diào)用JS端注冊的HandleName,一定注意此次的名字一定要與js端的相同。

js調(diào)用時也一樣


在JS端:

1.Copy and paste setupWebViewJavascriptBridge into your JS:

(此段代碼為固定格式,直接放在js端就行)

function setupWebViewJavascriptBridge(callback) {

if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }

if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }

window.WVJBCallbacks = [callback];

var WVJBIframe = document.createElement('iframe');

WVJBIframe.style.display = 'none';

WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';

document.documentElement.appendChild(WVJBIframe);

setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)

}

后面幾步與iOS端一樣

如有錯誤,望請指出。

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

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

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