1. 程式人生 > >h5和iOS原生互動,h5和iOS互相傳值

h5和iOS原生互動,h5和iOS互相傳值

前言 : h5和iOS原生互動,互相傳值,下面程式碼是完整的.M檔案  簡單實現h5和原生互動,互相傳值。

//
//  ViewController.m
//  原生-H5簡單互動
//
//  Created by Mr Yang on 2018/7/23.
//  Copyright © 2018年 MrYang. All rights reserved.
//
#define ScreemW   [UIScreen mainScreen].bounds.size.width
#define ScreemH   [UIScreen mainScreen].bounds.size.height
#import "ViewController.h"

//引用系統JS庫名
#import <JavaScriptCore/JavaScriptCore.h>
//原生建立JS代理方法 用於H5調此方法向原生傳值
@protocol JSDelegate <JSExport>
- (void)getImage:(id)parameter;
@end


@interface ViewController ()<UIWebViewDelegate,JSDelegate>

@property(retain, nonatomic) UIWebView *myWebView;
@property(strong, nonatomic) JSContext *jsContext;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupWebView];
}
- (void)setupWebView{
    if (!self.myWebView) {
        //初始化 WebView
        self.myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, ScreemW, ScreemH)];
        self.myWebView.backgroundColor = [UIColor whiteColor];
        self.myWebView.delegate = self;
        NSURL *path = path = [NSURL URLWithString:@"www.baidu.com"];
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:path]];
        [self.view addSubview:self.myWebView];
    }
}
#pragma mark UIWebViewDelegate
// 載入完成開始監聽js的方法


- (void)webViewDidFinishLoad:(UIWebView *)webView{
    
    
    self.jsContext = [self.myWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    self.jsContext[@"iosDelegate"] = self;

    self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exception){
        context.exception = exception;
        NSLog(@"獲取 self.jsContext 異常資訊:%@",exception);
    };
}

#pragma mark - JSDelegate
- (void)getImage:(id)parameter{
    
    
    dispatch_async(dispatch_get_main_queue(), ^{
        
        // parameter 就是H5給你傳的值
        
        JSValue *jsValue = self.jsContext[@"setImageWithPath"];
        
        //調取H5 JS 方法向H5傳值
        
        [jsValue callWithArguments:@[@{@"can1":@"",@"can2":@""}]];
    });
    
}


@end

相關推薦

h5iOS原生互動,h5iOS相傳

前言 : h5和iOS原生互動,互相傳值,下面程式碼是完整的.M檔案  簡單實現h5和原生互動,互相傳值。 // //  ViewController.m //  原生-H5簡單互動 // //  Created by Mr Yang on 2018/7/23. //  C

iOS原生H5頁面互動

一、原生框架<JavaScriptCore/JavaScriptCore> (1)JavaScriptCore: 是一種JavaScript引擎,主要為webKit提供指令碼處理能力,可以JS呼叫OC,也可以OC呼叫JS;   (2) JSContext: 代表

iOS原生H5雙向互動總結

1,單向通訊時候:webView可以利用代理方法擷取JS,來呼叫原生方法 其代理方法如下: - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)reque

JS&iOS原生互動 附程式碼地址

關於原生和hybid之爭,這裡不做探討.主要講講JS和OC互動 OC執行JS程式碼 1.stringByEvaluatingJavaScriptFromString 這個方法是UIWebView裡面的方法,也是最為簡單的和JS互動的方式- (nullable

h5與App原生互動方案

方便測試階段,H5嵌入到App當中,開發人員方便除錯與Debug。 目前主流的技術方案: 1.在iOS7以前,在UIWebView中實現一些代理方法攔截帶有約定好的protocol的Url,從Url上獲取get方式的引數傳遞,對映成本地原生方法,如下: -(BOOL)webView:(UIWebView *)

JS&iOS原生互動

關於原生和hybid之爭,這裡不做探討.主要講講JS和OC互動 OC執行JS程式碼 1.stringByEvaluatingJavaScriptFromString 這個方法是UIWebView裡面的方法,也是最為簡單的和JS互動的方式- (nullable NS

iOS原生介面與RN介面調及傳

文章目錄 3. iOS原生與RN互調及傳值 3.1 RN跳轉原生介面 3.2 RN跳轉原生介面並傳值 3.3 RN跳轉原生介面並傳值後,原生介面再回調給RN介面相關資訊 3. 4. 原生頁面向RN頁面傳值

關於父類元件子類元件的相傳

第一步:子類向父類傳值 在java中父類是可以將值傳給子類的,但是卻不能從子類拿到值,同理子類是可以將父類的值拿到手,但是卻不能將自己的值傳給父類 而在vue中,子類和父類之間是不允許傳值的但是,我們可以利用關聯和引用來讓他們之間建立起一些聯絡 子類向父類傳值要使用$e

struts---action頁面間相傳

1.預設配置下的excute方法傳值 這種方法很常見,大家基本上也都使用這一種最基本的方式,如: 2.經過自定義配置的action和頁面間的傳值 在struts.xml中的action配置如下: <action name="*/*/*" cla

h5ios原生混合開發,h5資料列表頁面上滑崩潰

ios建立webview,載入h5頁面,頁面中ajax去伺服器請求資料,上拉載入下一頁,當頁面中載入的頁面數量比較多時,往上滑動,會明顯看到螢幕出現白屏,之後資料才出來.如果快速往上滑動,app會崩潰

iOS 原生H5結合 WKWebView的長截圖問題

前言        最近的一版,有很多....泯滅人性的地方.遇到了一些之前沒有遇到的問題,也有了一些自己的體會,先說一個跟技術分享沒有關係的經驗問題: 一定不要為了省程式碼而作過多的邏輯判斷(主要是過不了自己心裡的一關),尤其是在週期緊的情況下,無論是寫還是review都是

thinkphp5實現根據渠道號不同實現安卓IOS的APP支付H5支付

<?php namespace app\api\controller; use think\Controller; use app\common\model\ShopInfo as ShopInfoModel; use app\common\model\UserOrde

React NativeiOS原生方法互動

原生傳遞引數給React Native 初始化時傳值 - (instancetype)initWithBundleURL:(NSURL *)bundleURL moduleName:(NSString *

H5 file呼叫手機相機相簿(相容安卓ios,親測有效)

<input id="input" type="file"/>標籤,iOS直接吊起相機拍照或是相簿選擇,但Android中只調起選擇相簿,沒有調起相機拍照 解決辦法: 只需要加上 accept="image/*" 就完美的相容安卓和IOS了(accept表示開啟的系統檔案目錄) <

cordova + ionic前端框架 jsandroid ios原生(native)互動

因為專案是大部分程式碼是js+html 寫的,現在想在js中開啟原生的頁面(Android為activity;ios是ViewController),解決android 的時候發現了兩種方法,其中一種是android和ios通用的,另一種只能在android上使用。 -、a

HTMLiOS互動,點選html中按鈕,ios進行原生方法呼叫,及ios到HTML

HTML和iOS的互動 一、 點選HTML中的按鈕,iOS獲取到HTML的傳值,並進行原生態的操作 匯入系統庫JavaScriptCore #import <JavaScript

iOS原生WebView中JavaScriptOC互動

在iOS開發中很多時候我們會和UIWebView打交道,目前國內的很多應用都採用了UIWebView的混合程式設計技術,最常見的是微信公眾號的內容頁面。前段時間在做微信公眾平臺相關的開發,發現很多應用場景都是利用HTML5和UIWebView來實現的。 注意事項 (

iOS 14 egret H5遊戲卡頓問題分析部分解決辦法

現象 總體而言,iOS 14 渲染效能變差,可以從以下幾個測試看出。   測試1:簡單demo,使用egret引擎顯示3000個圖(都是同一個100*100 png 紋理),逐幀做旋轉。(部落格園視訊播放可能有問題,視訊地址:https://github.com/kenkozheng/kenkozh

WebViewJavascriptBridge實現js與androidios原生

WebViewJavascriptB Android IOS js 1、實現原生與js交互 <!-- 申明交互 這段代碼固定必須有 --> function setupWebViewJavascriptBridge(callback) { //android使用

IOS 原生介面Weex容器互相跳轉實踐 附部分js原生程式碼

weex相關原理,請看官方網站 此IOS Weex demo實現的功能,從原生介面跳轉到Weex容器頁面,然後點選Weex容器頁面的button(js)跳轉到另一個原生介面。 一. 先上效果圖   二.實現 1. weex容器渲染的js程式碼如下,上面