webview和js交互 --------WebViewJavascriptBridge

pod 集成工具

pod 'WebViewJavascriptBridge', '~> 6.0'

使用:

  1. iOS代碼
#import "WebViewJavascriptBridge.h"
@property (nonatomic,strong)WebViewJavascriptBridge* bridge;
- (WebViewJavascriptBridge *)bridge{
    if (!_bridge) {
        _bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView];
        [_bridge setWebViewDelegate:self.delegate];
    }
    return _bridge;
}
// 調(diào)用js方法(與js的 doHead 對應)
[self.bridge callHandler:@"doHead" data:value responseCallback:^(id responseData) {
        NSLog(@"%@ == %@",name,value);
        if (callBack) callBack(responseData);
    }];
// 添加一個js方法 (與js的 styleCallBack 對應)
[self.bridge registerHandler:@"styleCallBack" handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"%@",[NSThread currentThread]);
        if (callBack) callBack(data);
    }];
  1. 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 = 'https://__bridge_loaded__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
}
setupWebViewJavascriptBridge(function(bridge) {
                             bridge.registerHandler('doHead', function(data, responseCallback) {
                                                    var responseData = null;
                                                    window.doHead();
                                                    responseCallback(responseData);
                                                    })
}
window.styleCallBack = function(value){
    window.WebViewJavascriptBridge.callHandler('styleCallBack', value, function(response) {
        return editor.getFormat();
    });
}

進階:簡單的封裝一個簡單的管理類

#import <UIKit/UIKit.h>

// 負責通訊
@interface JavaScriptCoreManager : NSObject

/**
 webview 就是JavaScriptCoreManager 操作的webview 也支持wkwebview
 */
@property (nonatomic,assign)id webView;

/**
 運行時替換了webview的delegate 此處設(shè)置的是webview的delegate
 */
@property (nonatomic,assign) id delegate;


/**
 調(diào)用js的方法
 
 @param name 方法名
 @param value 參數(shù)
 @param callBack 返回值
 */
- (void)RunJSMethordByName:(NSString *)name
                  AndValue:(NSString *)value
               AndCallBack:(void(^)(NSString *result))callBack;


/**
 添加一個js方法

 @param name 方法名
 @param callBack 方法調(diào)用的回調(diào)
 */
- (void)addJSMethrdByName:(NSString *)name
              AndCallBack:(void(^)(NSString *result))callBack;

@end
#import "JavaScriptCoreManager.h"
#import "WebViewJavascriptBridge.h"

@interface JavaScriptCoreManager ()
@property (nonatomic,strong)WebViewJavascriptBridge* bridge;
@end
@implementation JavaScriptCoreManager

//調(diào)用js的方法
- (void)RunJSMethordByName:(NSString *)name
                  AndValue:(NSString *)value
               AndCallBack:(void(^)(NSString *result))callBack{
    [self.bridge callHandler:name data:value responseCallback:^(id responseData) {
        NSLog(@"%@ == %@",name,value);
        if (callBack) callBack(responseData);
    }];
}

// 添加一個js方法
- (void)addJSMethrdByName:(NSString *)name
              AndCallBack:(void(^)(NSString *result))callBack{
    [self.bridge registerHandler:name handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"%@",[NSThread currentThread]);
        if (callBack) callBack(data);
    }];
}
- (WebViewJavascriptBridge *)bridge{
    if (!_bridge) {
        _bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView];
        [_bridge setWebViewDelegate:self.delegate];
    }
    return _bridge;
}
@end

使用:

// 調(diào)用
 [self.jsManager RunJSMethordByName:@"doHead" AndValue:@"h2" AndCallBack:nil];
// 添加
 [self.jsManager addJSMethrdByName:@"styleCallBack" AndCallBack:^(NSString *type){
          // 回掉處理
 }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闪萄,一起剝皮案震驚了整個濱河市同欠,隨后出現(xiàn)的幾起案子僵腺,更是在濱河造成了極大的恐慌,老刑警劉巖庐氮,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猎塞,死亡現(xiàn)場離奇詭異垢乙,居然都是意外死亡渣慕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門裂逐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歹鱼,“玉大人,你說我怎么就攤上這事卜高∶忠觯” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵掺涛,是天一觀的道長庭敦。 經(jīng)常有香客問我,道長薪缆,這世上最難降的妖魔是什么秧廉? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮拣帽,結(jié)果婚禮上疼电,老公的妹妹穿的比我還像新娘。我一直安慰自己减拭,他們只是感情好蔽豺,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拧粪,像睡著了一般修陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上既们,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天濒析,我揣著相機與錄音正什,去河邊找鬼啥纸。 笑死,一個胖子當著我的面吹牛婴氮,可吹牛的內(nèi)容都是我干的斯棒。 我是一名探鬼主播盾致,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荣暮!你這毒婦竟也來了庭惜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤穗酥,失蹤者是張志新(化名)和其女友劉穎护赊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砾跃,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡骏啰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抽高。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片判耕。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖翘骂,靈堂內(nèi)的尸體忽然破棺而出壁熄,到底是詐尸還是另有隱情,我是刑警寧澤碳竟,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布草丧,位于F島的核電站,受9級特大地震影響瞭亮,放射性物質(zhì)發(fā)生泄漏方仿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一统翩、第九天 我趴在偏房一處隱蔽的房頂上張望仙蚜。 院中可真熱鬧,春花似錦厂汗、人聲如沸委粉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贾节。三九已至,卻和暖如春衷畦,著一層夾襖步出監(jiān)牢的瞬間栗涂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工祈争, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斤程,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓菩混,卻偏偏與公主長得像忿墅,于是被迫代替她去往敵國和親扁藕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,097評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫疚脐、插件亿柑、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,098評論 4 62
  • 從十幾歲走到快而立之年望薄,雖說男人才三十而立,可女人又何嘗不是呼畸? 你年輕時不努力你就輸了式矫。 十八歲時,喜歡一個人役耕,也...
    顧清憶閱讀 560評論 0 3
  • 「見字如面·書世界」征文 黃金榮——《黃金榮全傳》 黃先生您好 我叫妍兮采转,是一位剛拜讀完他人為您所書寫的傳記的普通...
    妍兮閱讀 648評論 1 3