Advertisement

iOS和H5界面的JSBridge交互示例

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本示例展示了如何在iOS应用中实现JavaScript与原生代码间的通信,通过JSBridge技术让H5页面能够调用本地功能或接收来自本地的消息。 iOS的UIWebView与H5的JS之间的相互调用及传值示例代码,一键运行,简洁明了。这些都是我自己曾经遇到并解决的问题。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • iOSH5JSBridge
    优质
    本示例展示了如何在iOS应用中实现JavaScript与原生代码间的通信,通过JSBridge技术让H5页面能够调用本地功能或接收来自本地的消息。 iOS的UIWebView与H5的JS之间的相互调用及传值示例代码,一键运行,简洁明了。这些都是我自己曾经遇到并解决的问题。
  • JsBridge及Android与JS
    优质
    本篇文章将详细介绍如何使用JsBridge进行Android应用和JavaScript之间的通信。通过实例解析其工作原理,并提供实用代码演示。 JSBridge示例实现JavaScript与Android原生代码的交互及回调功能,以促进快速开发。
  • iOS原生与React-Native代码
    优质
    本项目提供了一组示例代码,旨在展示如何在iOS应用中集成和实现原生组件与React-Native框架之间的交互。适合开发者学习和参考。 在使用React Native开发iOS应用的过程中,有时需要与原生的Objective-C或Swift代码进行交互以实现某些特定功能。例如,在一些情况下我们可能需要用到`UITableView`来展示数据。 这里将通过一个例子介绍如何创建并暴露给React Native端的一个基于`UITableView`的数据表格视图组件,并且包括了如何在iOS原生部分与React Native之间交换信息和事件的方法。 ### 一、构建原生的UITableView 首先,我们需要定义一个继承自UIViewController的新类`NativeTableViewController`来控制我们的数据表格。在这个例子中我们会添加两个方法:设置数据源以及改变背景颜色。 ```objective-c // NativeTableViewController.h #import @interface NativeTableViewController : UIViewController @property (nonatomic, strong) NSMutableArray *datas; - (void)setDatas:(NSArray *)datas; - (void)changeBackgroundColor:(UIColor *)color; @end // NativeTableViewController.m #import NativeTableViewController.h @implementation NativeTableViewController - (void)viewDidLoad { [super viewDidLoad]; self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; [self.view addSubview:self.tableView]; } - (void)setDatas:(NSArray *)datas { self.datas = datas; [self.tableView reloadData]; } - (void)changeBackgroundColor:(UIColor *)color { self.view.backgroundColor = color; } @end ``` ### 二、创建一个UIView来桥接UITableView与React Native 为了能够从React Native中调用这个`UITableView`,我们需要把它封装在一个自定义的UIView里。 ```objective-c // NativeTableView.h #import @interface NativeTableView : UIView @property (nonatomic, strong) NativeTableViewController *controller; @end // NativeTableView.m #import NativeTableView.h #import NativeTableViewController.h @implementation NativeTableView - (instancetype)init { self = [super init]; if(self){ self.controller = [[NativeTableViewController alloc] init]; [self addSubview:self.controller.view]; } return self; } - (void)setDatas:(NSArray *)datas{ [self.controller setDatas:datas]; } - (void)changeBackgroundColor:(UIColor *)color { [self.controller changeBackgroundColor:color]; } @end ``` ### 三、使用RCTViewManager注册自定义的UIView 接下来,我们需要通过`RCTViewManager`将这个新的视图组件暴露给React Native。 ```objective-c // NativeTableViewManager.h #import @interface NativeTableViewManager : RCTViewManager @end // NativeTableViewManager.m #import NativeTableViewManager.h #import NativeTableView.h @implementation NativeTableViewManager RCT_EXPORT_MODULE(); - (UIView *)view { return [[NativeTableView alloc] init]; } RCT_EXPORT_VIEW_PROPERTY(datas, NSArray); RCT_EXPORT_VIEW_PROPERTY(changeBackgroundColor, UIColor *); @end ``` ### 四、在React Native中使用原生UITableView组件 现在,我们可以在JS代码里导入并使用这个自定义的`NativeTableView`了。 ```javascript import React, { useEffect } from react; import { requireNativeComponent } from react-native; const NativeTableView = requireNativeComponent(RNNativeTableView); export default function App() { const [datas, setDatas] = useState([Item 1, Item 2, Item 3]); useEffect(() => { var tableView = ; // 改变背景颜色 tableView.changeBackgroundColor(red); return () => {}; }, [datas]); return ( ); } ``` ### 五、让原生端向React Native发送事件 我们可以在`UITableViewDelegate`的方法中添加代码来通知React Native有行被删除了。 ```objective-c - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if(editingStyle == UITableViewCellEditingStyleDelete){ [self.datas removeObjectAtIndex:indexPath.row]; [[NSNotificationCenter defaultCenter] postNotificationName:@onRowDeleted object:nil userInfo:@{@index: @(indexPath.row)}]; } } ``` ### 六、在React Native监听原生端事件 最后,我们可以在JS代码里设置一个监听器来接收从iOS原生发送过来的行删除通知。 ```javascript import React, { useEffect } from react; import { requireNativeComponent, NativeEventEmitter } from react-native; const eventEmitter = new NativeEventEmitter(); useEffect(() => { const listener = eventEmitter.addListener(onRowDeleted, (event) => { console.log(`Row deleted at index ${event.index}`); }); return () => { listener.remove(); }; }, []); ``` 以上步骤展示了如何在React Native应用中使用原
  • JsBridge代码.rar
    优质
    本资源为JsBridge示例代码.rar,包含JavaScript与Native之间通信的示例源码,适用于移动Web开发中增强页面交互功能。 Webview 实现的 Java 与 JS 的交互存在一些安全问题。Android 使用 WebViewJavascriptBridge 来实现 JS 和 Java 的交互。
  • WebSocket前端页后台
    优质
    本示例展示了如何使用WebSocket技术实现在网页前端与服务器后端之间进行实时双向通信,包括简单的连接建立、消息收发及断开流程。 在使用WebSocket进行前端页面与后台交互的示例中,请先解压文件并用IDEA导入项目,然后启动WebsocketServer类。接着,在浏览器中打开websocket.html页面,可以看到连接已建立。在此之后,在发送框内输入{id:1,type:yes}会返回666;输入其他信息则会收到相应的提示信息。
  • NettySocket
    优质
    本项目提供了一个使用Java开发的示例程序,演示了如何利用Netty框架与传统的Socket编程方式进行数据通信。通过实例代码,深入浅出地讲解了Netty在网络编程中的优势及应用场景。 项目中使用到的Netty与普通Socket交互实例对熟悉Netty的技术人员非常有用。
  • iOS 用户动指南(iOS Human Interface Guidelines)
    优质
    《iOS用户界面互动指南》为开发者和设计师提供了苹果官方关于iOS系统设计原则、交互规范及视觉元素的最佳实践指导。 简介 概览:优秀的iOS应用拥抱平台特性和HI设计原则。 清晰的定义是优秀应用程序设计的基础。一个出色的用户体验源自于你对细节的关注。用户期望在他们使用的应用中找到iOS技术功能。 所有应用程序至少需要一些自定义艺术品来增强其独特性。 第1章 平台特性 显示设备的重要性:无论屏幕大小,显示都是至关重要的。 设备的方向可以变化。 应用响应手势操作而不是点击行为。 人们一次只与一个应用交互。 偏好设置可在“设置”中找到。 屏幕上几乎没有用户帮助信息。 大多数iOS应用程序只有一个窗口。 在iOS中有两种类型的软件运行。Safari为iOS提供网页界面。 第2章 人机接口原则 美学完整性:设计应体现美感并符合平台规范,同时保持功能性和可访问性。 一致性:应用的设计和行为应当与其他标准应用保持一致。 直接操作:用户应该能够通过直观的手势操作来控制设备。 反馈机制:系统需要及时且清晰地向用户提供响应或信息以确认其动作已被接收或执行。 隐喻使用:设计应利用人们熟悉的概念,使新功能易于理解和学习。 用户控制权:应用程序应让用户在交互中保持主导地位。 第3章 应用程序设计理念 制定应用定义声明 列出所有可能吸引用户的特性。 确定目标用户群体是谁。 通过受众定义过滤特征列表。 不要停滞不前;继续改进和完善设计以满足客户需求和期望的变化。 针对设备进行设计:考虑屏幕尺寸、分辨率等因素,确保用户体验最佳化。 拥抱iOS UI范式,并在开发过程中始终遵循这些准则; 为iPhone和平板电脑上的通用应用提供良好的性能表现。 重新评估基于Web的设计:利用本地功能使用户能够获得更佳体验。 根据任务定制自定义选项;不要让它们成为一种负担或干扰因素,而是要确保其与用户的交互方式相匹配并能提高效率和满意度 原型设计及迭代开发是优化用户体验的关键步骤。 第4章 案例研究:从其他平台过渡到iOS 桌面邮件应用向iPhone的迁移。 桌面演示文稿软件(如Keynote)迁移到iPad的过程分析。 将iPhone上的邮箱功能扩展至iPad上使用的方法探讨。 网页浏览器转向Safari iOS版时需要注意的设计调整。 第5章 用户体验指南 专注主要任务:确保用户界面清晰,重点突出核心功能; 提升人们关心的内容价值;让重要信息易于获取且引人注目 从顶部开始思考设计流程并提供逻辑路径供用户遵循。 使使用变得简单直观。 采用以用户为中心的术语和语言来描述操作或概念。 减少对用户的输入要求从而简化任务执行过程; 尽量避免让用户处理文件管理等繁琐事务,而是直接集成这些功能到应用程序中去。 促进协作与连接;设计时考虑如何帮助人们轻松分享信息并与他人互动 淡化设置界面的重要性以降低新用户的学习曲线和使用障碍。 适当的品牌化可以增强应用的识别度和吸引力; 确保搜索功能快速响应且具有高相关性结果,提供即时反馈来满足用户需求。 撰写引人入胜的应用描述并加以优化;简洁明了地传达核心价值主张 保持一致性的UI元素用法以提升整体可用性和熟悉感。 考虑添加物理效果或现实世界的类比来增强互动体验; 使用令人惊叹的图形吸引和留住用户的注意力。 适应方向变化,确保应用在不同屏幕朝向上都能正常工作并提供良好的用户体验。 使触控目标足够大以便于操作;60px x 60px是推荐尺寸 利用微妙动画传达状态或反馈信息以提高互动性和可理解性; 适当支持手势来增强交互体验但不要过度使用以免造成混淆。 第6章 iOS技术使用指南 iCloud存储:帮助用户方便地访问和同步数据。 多任务处理:提供无缝的用户体验,让用户可以同时执行多个操作而不会感到困扰或中断 通知中心是向用户提供重要信息的重要渠道;它应被设计为高效且非侵扰性的; 打印功能允许用户轻松将内容从应用输出到物理介质上。 iAd富媒体广告可帮助开发者通过展示相关性较高的横幅和视频来增加收入。 快速查看文档预览功能让用户能够以全屏模式浏览文件而无需离开当前的应用程序上下文。 第7章 iOS UI元素使用指南 状态栏:显示设备的电池电量、蜂窝信号强度及时间等信息; 导航栏帮助用户在应用内进行前后移动或切换内容区域。 工具条用于访问最常用的功能,通常位于屏幕底部或者顶部。 标签栏允许用户轻松地在一个屏幕上浏览多个视图控制器的内容; 第8章 自定义图标和图像创建指南 设计精美的图标和图片是吸引用户的首要步骤; 为Retina显示屏创作高质量的图形可显著提升视觉效果。 制作可以缩放而不失真的图像,以适应不同的屏幕尺寸
  • UnityAndroid
    优质
    本示例演示展示了如何使用Unity游戏引擎与Android设备进行互动,涵盖从基本设置到实现复杂功能的全过程。 与以往使用Unity的方式不同,这次的Demo不再直接在Unity中调用UnityPlayer类,而是从Android Studio获取自定义的单例模式,并在其类中定义所需的函数及参数类型。包名规则保持不变,仍需与Unity中的对应一致。
  • Unity科幻风格全息UI(附带多个
    优质
    本资源包提供了一系列基于Unity引擎开发的科幻风格全息交互界面UI设计,包含多种示例项目,助力开发者构建沉浸式虚拟体验。 Unity科幻风格的全息交互界面UI(内含多个Demo),如果出现报错,请在AssetStore下载LegacyImageEffects并导入使用。
  • AndroidVue方法
    优质
    本教程详细介绍了如何在Android应用中集成Vue.js框架,并通过具体示例展示了二者之间的数据交互方式。适合开发者学习实践。 熟悉 Android 混合开发的人应该了解 Java 代码与 JavaScript 代码之间的交互方式。首先回顾一下如何在 Java 和 JavaScript 之间进行调用:JavaScript 调用 Java 在 Android 中,可以通过 WebView 添加供 HTML 页面调用的 Java 方法: ```java mWebView.addJavascriptInterface(new DirectToJS(), AndroidObj); ``` 然后创建一个类 `DirectToJS` 并使用注解来暴露方法给 JavaScript 代码: ```java class DirectToJS { @JavascriptInterface public void showToast() { Toast.makeText(context, Hello from Java, Toast.LENGTH_SHORT).show(); } } ``` 这样,HTML 页面就可以通过调用 `AndroidObj.showToast()` 来执行 Java 中的方法了。