如何从 Javascript 调用 Objective-C?

2024-03-25

我有一个 WebView,我想从 JavaScript 调用 Objective-C 中的视图。有人知道我该怎么做吗?


我的 ViewController 中有这段代码:

- (BOOL)webView:(UIWebView *)webView2 
 shouldStartLoadWithRequest:(NSURLRequest *)request 
 navigationType:(UIWebViewNavigationType)navigationType {

 NSString *requestString = [[request URL] absoluteString];
 NSArray *components = [requestString componentsSeparatedByString:@":"];

 if ([components count] > 1 && 
  [(NSString *)[components objectAtIndex:0] isEqualToString:@"myapp"]) {
  if([(NSString *)[components objectAtIndex:1] isEqualToString:@"myfunction"]) 
  {

   NSLog([components objectAtIndex:2]); [[Airship shared] displayStoreFront]; //<- This is the code to open the Store
   NSLog([components objectAtIndex:3]); // param2
   // Call your method in Objective-C method using the above...
  }
  return NO;
 }

 return YES; // Return YES to make sure regular navigation works as expected.
}

在 JavaScript 中:

function store(event)
{
    document.location = "myapp:" + "myfunction:" + param1 + ":" + param2;
}

但什么也没发生。


标准解决方法为UIWebView就是设置一个UIWebViewDelegate,并实现该方法webView:shouldStartLoadWithRequest:navigationType: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIWebViewDelegate/webView:shouldStartLoadWithRequest:navigationType:。在您的 JavaScript 代码中,导航到某个虚假 URL,该 URL 对您要传递给应用程序的信息进行编码,例如:

window.location = "fake://myApp/something_happened:param1:param2:param3";

在您的委托方法中,查找这些假 URL,提取您需要的信息,采取任何适当的操作,然后返回NO取消导航。如果您使用以下命令推迟任何冗长的处理,这可能是最好的一些味道performSelector http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/doc/uid/20000050-SW20.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Javascript 调用 Objective-C? 的相关文章

  • iPhone签名捕捉

    是否可以通过电缆 USB 连接将签名从 iPhone 传输到 xls 文件 因此 这可能不完全是您正在寻找的内容 但这就是我捕获用户 用手指 手写笔 绘制的签名的方式 您的 UIImageView 将具有绘制的签名 我没有考虑过如何将签名图
  • 对 Objective-c 对象数组进行排序

    所以我有一个自定义课程Foo有许多成员 interface Foo NSObject NSString title BOOL taken NSDate dateCreated 在另一堂课上我有一个NSMutableArray包含这些对象的列
  • MPMoviePlayerViewController,删除 Quicktime 符号/添加背景图像?

    我有一个播放音频的 MPMoviePlayerViewController 我想删除 Quicktime 徽标和 或向播放器添加自定义背景图像 但保留播放控件 我发誓我在 iOS 5 之前就已经这样做过 但我无法重新弄清楚 我尝试过的事情
  • 检索旋转的 UIImageView 的所有 4 个坐标

    如何获取 UIImageView 的 4 个坐标 我知道可以得到CGRect以及origin x和origin y 但是如何找到所有4个角呢 编辑 我正在旋转 UIImageViews 这就是我问的原因 P 您可以添加矩形的宽度和高度来获取
  • UIView transitionFromView:如何在转换过程中实现黑色背景?

    我使用下一个代码 UIView transitionFromView viewA toView viewB duration 1 0 options UIViewAnimationOptionTransitionFlipFromLeft c
  • 为 iPhone SDK 优化绘图(用手指触摸)应用程序

    我正在编写一个使用手指绘制简单图表的应用程序 我让它在大部分情况下都能工作 但现在我正在尝试优化它的性能 当用户快速滑动手指时 我无法捕获足够的触摸事件来绘制平滑的路径 这是我目前的方法 1 我对 UIView 进行了子类化 并向 CGLa
  • 使用 NSCache 实现缓存过期

    我正在使用 NSCache 在我的应用程序中实现缓存 我想为其添加过期时间 以便在一段时间后它将获取新数据 有哪些选择以及最好的方法是什么 我应该查看访问缓存时的时间戳并使之无效吗 缓存是否应该通过使用固定间隔计时器自动使自身失效 缓存是否
  • 如何知道我的 Xcode iPhone 项目是否使用 ARC?

    我想知道我的 Xcode iPhone 项目是否正在使用 ARC 但我不记得在创建项目时是否勾选了该框 我怎样才能得到这些信息 选择您的项目 然后构建设置 寻找Objective C 自动引用计数 in the Apple LLVM 编译器
  • 如何制作全局数组?

    所以 我读了这个帖子 https stackoverflow com questions 1249131 declaring global variables in iphone project 这几乎正是我正在寻找的东西 然而 这不起作用
  • 是否可以在两个应用程序之间共享一项应用程序内购买?

    我的产品有两种不同的版本 一种用于 iPhone 另一种用于 iPad 是否有可能解锁功能通过应用内购买in both与其中之一一起玩一次 您不能使用相同的 ID 但是 您可以管理有关哪些用户在您自己的服务器上进行了哪些购买的信息 并在用户
  • Xcode 4 .xib 创建 iPad 版本

    我有一台 iPhone xib 我想将其变成 iPad xib 在 Xcode 3 中 有一个 创建 iPad 版本 菜单选项 我如何在 Xcode 4 中执行此操作 我目前调整了 xib 的大小 但是当我打开模拟项目 导航栏等 时 它会将
  • iOS模拟器找不到SDK,可能需要重新安装SDK

    在这里 我遇到了另一个问题 今天正在开发一个 iOS 应用程序 当我运行 iPhone 5 0 模拟器的应用程序时 仅在该模拟器上遇到了一些奇怪的问题 当我尝试一次又一次地运行该模拟器时 我的 MacBook 屏幕上出现了两个弹出警报窗口
  • Swift 中的自定义输入视图

    我花了几个小时试图弄清楚如何创建 然后定制inputView上班 我有一个网格TextInputs 想想拼字板 按下时应该加载自定义inputView插入文本 我创建了一个 xib文件包含UI elements为定制inputView 我能
  • phonegap 插件,用于从库中选择视频

    我需要能够从库中选择视频并将其上传到我的服务器 我可以录制新视频 captureVideo 并上传 文件传输 没问题 但我似乎找不到任何方法来打开视频库并选择视频然后上传 有什么办法可以做到这一点吗 以某种方式更改 MediaType na
  • 从 iOS 中的 App Delegate 调用当前视图控制器中的方法

    我有两个视图控制器 BuildingsViewController 和 RoomsViewController 它们都使用应用程序委托中名为上传的函数 上传函数基本上执行一个 HTTP 请求 如果成功或不成功 都会触发 uialertvie
  • 强制向扬声器发出音频警报

    我有一个小应用程序 在此应用程序中 扬声器每隔我设置的特定时间就会发出噪音 现在 我希望即使设备中插入了耳机插孔 它也能通过内置扬声器发出噪音 我怎样才能做到这一点 您可以尝试以下代码在扬声器上播放代码 另请检查this http uiha
  • 将 UIImageView 置于 UIScrollView 内而不使用 contentInset?

    我一直无法找到我遇到的这个问题的答案 我在 UIScrollView 中有一个 UIImageView 我希望将其内容垂直居中 目前 我能够做到这一点的唯一方法是根据 UIImageView 大小的高度设置滚动视图的 contentInse
  • iPhone SDK:拖动 UIImageView 时出现问题

    我正在尝试在我的应用程序中拖动 iPhone 屏幕上的 UIImageView 目前我设置的拖动功能很好 拖动图像确实会在屏幕上移动它 问题是你不必拖动图像视图来移动它 你也可以拖动屏幕上的任何地方 它会移动图像 我是这个平台的新手 所以我
  • UIView 和 UITableView 中的 UITapGestureRecognizer 冲突

    我有一个UIView我在其中添加了一个UITapGestureRecognizer 在该视图中 我还有一个子视图 其中基本上是某种UITableView 问题是为什么不UITableView识别连续点击 而是始终转到点击手势识别器的处理程序
  • 使用 iOS swift AVPlayer 在横向模式下不全屏

    我将视频视图设置为全屏 然而 在模拟器中玩时 它并没有全屏运行 此问题仅适用于 iPad 不适用于 iPhone 这是我的代码 override func viewDidAppear animated Bool super viewDidA

随机推荐

  • 在matlab中绘制颜色编码图

    我需要使用 dat 文件绘制颜色编码的二维图 文件中的数据排列为 48 000000 0 000184 0 400000 48 500000 0 000185 0 400000 49 000000 0 000186 0 400000 49
  • Python中获取网络地址和网络掩码

    在我的 Python 脚本中 我需要检索运行脚本的计算机的 IP 地址及其网络地址和网络字节 至于IP地址 我在存档中找到了解决方案 import socket s socket socket socket AF INET socket S
  • 如何在 yii2 basic 中使用日期选择器?

    我想使用 yii2 datepicker 但我在实现它时遇到了麻烦 它不显示日期选择器 我不知道我的代码中缺少什么 我对这个yii还是个新手 div class row div class col lg 6 div class myproj
  • Firestore:使用 Flutter 添加或删除现有数组中的元素[重复]

    这个问题在这里已经有答案了 是否可以向存储在 Firestore 文档中的现有数组添加或删除元素 而不是获取数组 在本地添加元素并将其发送回存储 希望是的 您可以结合使用 update 方法来附加或删除元素FieldValue arrayU
  • 在 Django 中的多个应用程序中使用相同的静态文件

    我的Django项目分为几个应用程序 静态文件存储在每个应用程序中 如下所示 Project foo static css style css views py models py urls py bar static css style
  • std::map 中 std::string 的 Valgrind 内存泄漏

    这是 Valgrind 的输出 6519 at 0x4C25885 operator new unsigned long vg replace malloc c 319 6519 by 0x4EE65D8 std string Rep S
  • 删除 ASP.NET MVC 4 到应用程序根目录的路径中的尾部斜杠

    在我的 ASP NET MVC 4 应用程序中RouteConfig文件中 我注册了以下默认路由 routes MapRoute Default controller action id new controller home action
  • 设置 jQuery.data() 是否会触发事件?

    我想知道是否致电 domElement data key newValue 会触发一个我可以处理的事件吗 我尝试过绑定change但设置数据时不会触发此操作 我认为这个问题可能会问类似的问题 但具有约束力changeData也没用 jQue
  • 在 AndroidJunit 测试项目中运行 UiAutomatorTestcase

    我实际上正在尝试在 Android Junit Test 项目中实现一个简单的测试套件 该项目使用以下类 UiObject 用户界面选择器 UiAutomator测试用例 单击并打开 Android 设备上的 Messaging 应用程序
  • java中多线程环境下的静态方法行为

    class Clstest public static String testStaticMethod String inFileStr section 0 section 1 do something with inFileStr sec
  • 允许向 ChoiceType 字段添加新值

    I use Form Component并有一个选择类型字段 http symfony com doc current reference forms types choice html在呈现到选择字段的表单上 在客户端我使用选择2插件 h
  • 亚马逊 S3 URL 编码

    如果我有一个文件名 a d1 tttt sq jpg 当它上传到 Amazon S3 时 它会转换为这样 a d1 22 tttt 22 sq jpg 因此双引号被 URL 编码并且文件名本身被更改 必须使用编码的 URL 来获取文件 a
  • 如何杀死一个pid不断变化的进程?

    我知道我可以使用这个技巧if fork exit 0 改变当前进程的pid 因此 下面的程序的 pid 变化很快 如何杀死这样的进程 有没有比执行大量更好的方法killall procname直到一个人能够奔跑kill 在分叉之前 我知道这
  • 当图像大小不同时,如何格式化图像数据以进行训练/预测?

    我正在尝试训练对图像进行分类的模型 我遇到的问题是 它们的尺寸不同 我应该如何格式化我的图像 或模型架构 你没有说你在说什么架构 既然你说你想对图像进行分类 我假设它是一个部分卷积 部分完全连接的网络 如 AlexNet GoogLeNet
  • 使用匿名方法有任何开销吗?

    我想知道创建后台工作人员时使用匿名方法是否会产生任何开销 例如 public void SomeMethod BackgroundWorker worker new BackgroundWorker worker DoWork sender
  • 算术溢出相当于模运算吗?

    我需要在 C 中进行模 256 算术 那么我可以简单地做吗 unsigned char i i 代替 int i i i 1 256 不 没有什么可以保证unsigned char有八位 使用uint8 t from
  • 向 Apache Fop 添加注释

    我正在使用渲染 PDF阿帕奇 福普 我正在制作 XSLT 模板 用于将 xml 转换为 PDF 我想使用以下方法在输出 PDF 中添加注释阿帕奇 福普 我一直在搜索 它说 iText 支持向 pdf 添加注释 是否可以在 Apache Fo
  • wpf手动生成TreeViewItem容器

    我正在运行时创建一个 TreeView 它有几个节点 TreeViewItem 每个节点都有一个名称 最初它是崩溃的 单独的组合框显示所有 TreeViewItem 的名称 我必须根据所选名称突出显示 TreeViewItem 我正在使用递
  • 使用 scala 将 Spark 中的 DataFrame 单行转置为列

    我在这里看到这个问题 使用 scala 在 Spark 中转置数据帧而不进行聚合 https stackoverflow com questions 49392683 transpose dataframe without aggregat
  • 如何从 Javascript 调用 Objective-C?

    我有一个 WebView 我想从 JavaScript 调用 Objective C 中的视图 有人知道我该怎么做吗 我的 ViewController 中有这段代码 BOOL webView UIWebView webView2 shou