
先看一下Web中,我们给h1标签添加一个onclick事件,让它在被点击之后,修改当前的url。
Web中的HTML代码:
<html>
<head>
<script>
function getInfo(name)
{
window.location = "/getInfo/"+name
}
</script>
</head>
<body>
<h1 onclick="getInfo('why')">Name</h1>
</body>
</html>
iOS中,先拖拽WebView,访问localhost,然后通过WebView的委托事件监听url跳转 *** 作,并且把跳转截取下来。
也就是说,在onclick的时候,普通浏览器灰跳转到那个url,但是在iOS的这个WebView里面,这个跳转会被拦截,
用这种方式可以巧妙地实现JS调用iOS的原生代码:
//
// DWViewController.m
// DareWayApp
//
// Created by why on 14-6-3.
// Copyright (c) 2014年 DareWay. All rights reserved.
//
#import "DWViewController.h"
@interface DWViewController ()
@property (weak, nonatomic) IBOutlet UIWebView *myWebview // 主页面
@end
@implementation DWViewController
- (void)viewDidLoad
{
[super viewDidLoad]
// Do any additional setup after loading the view, typically from a nib.
// 适配iOS6的状态栏
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
_myWebview.frame = CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height-20)
}
// 加载制定的URL
NSURL *url =[NSURL URLWithString:@"http://localhost"]
NSURLRequest *request =[NSURLRequest requestWithURL:url]
[_myWebview setDelegate:self]
[_myWebview loadRequest:request]
}
// 网页中的每一个请求都会被触发
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// 每次跳转时候判断URL
if([request.mainDocumentURL.relativePath isEqualToString:@"/getInfo/why"])
{
NSLog(@"why")
return NO
}
return YES
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning]
// Dispose of any resources that can be recreated.
}
@end
这是个比较专业的问题首先我推荐一个:react native,facebook推出的一个跨平台解决方案,去年推出了iOS版,手机淘宝的有一个模块“猜你喜欢”就是用react native实现的,效果还不错,另外今年9月份,facebook推出了android版,大家不妨试一下,这里针对于webapp,做了一个比对:
相对于Webapp的优势:
不用Webview,彻底摆脱了Webview让人不爽的交互和性能问题;
有较强的扩展性,这是因为Native端提供的是基本控件,JS可以自由组合使用;
可以直接使用Native原生的「牛逼」动画(在FB Group这个app里面,面板滑出带一点果冻d动,面板基于某个点展开这种动画随处可见,这种动画用Native code来做小菜一碟,但是用Web来做就难上加难)。
相对于Native app的优势:
可以通过服务端远程更新JS,进而直接更新app的页面;
相对于Webapp和Native的劣势:
扩展性仍然远远不如web,也远远不如直接写Native code;
从Native到Web,要做很多概念转换,势必造成双方都要妥协。最终web要用一套CSS的阉割版,Native要费劲地把这个阉割版转换成native原生的表达方式(比如iOS的Constraint\origin\Center等属性)。
另外我以前在CocoaChina上收藏过的一个帖子,整理了许多iOS和Android跨平台解决方案,感觉很不错,现在拿出来分享给大家,希望对题主有帮助。
1、jQuery Mobile
jQuery Mobile是jQuery 在手机上和平板设备上的版本。jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。jQuery Mobile文档比较全面,同时有在线工具帮你快速创建自己中意的UI风格。
技术需求:HTML,CSS,jQuery
平台支持: 绝大多数移动浏览器
2、Corona SDK(使用Lua语言):
Corona SDK的优点:
稳定;支持硬件加速、GPS、指南针及照相机等;支持与Map、Facebook、OpenFient、GameCenter的集成;内建的物理集成;Lua语言比较容易学习;
已经有了一些很不错的应用,至少能够证明这个SDK是可以做出优秀应用来的;不错的社区支持。
Corona SDK不太好的地方:
只支持iOS和Android;Lua语言不是面向对象的;每年都要交授权费(99美元/年)。
另外还有其他的一些补充,比如:
对于Corona SDK不支持的第三方SDK没法自己去集成;编译项目的时候需要把代码上传到Corona的服务器上去编译,不能在本地直接编译;无法扩展Corona的功能;物理模块还有一些缺陷。
3、Airplay SDK(后来更名为Marmalade,不少大的公司在使用Airplay SDK,尤其适用于进行2D/3D游戏的开发)
目前使用Marmalade的游戏有《割绳子》、《植物大战僵尸》、《你猜我画》、Build 'n' Bash 3D、Catch the Monkey、Need for Speed Shift以及WorkSnug Pro等多款游戏。
Airplay SDK文档中还包含多个示例。“感觉受到限制”的开发者还可以在Airplay SDK上进行扩展。开发者需要对C++比较熟悉。
4、Appcelerator(Titanium)
Appcelerator允许使用HTML/Javascript来开发原生app,开发者可以免费使用。目前世界上185个国家中有超多46万的开发者在使用Appcelerator提供的解决方案。
Titanium为Appcelerator于2008年底所推出的跨平台应用程序开发解决方案,目前支持iOS/Android/Blackberry/WM7等行动平台,以及Windows/Linux/OS X这三种主流的桌上型平台。
IOS的应用程序不是用JAVA写的,是通过AJAX写的。
在2007年苹果全球开发者大会上,苹果宣布iPhone和iPod Touch将会通过Safari互联网浏览器支持某些第三方应用程序, 这些应用程序被称为Web应用程序,它们能通过AJAX互联网技术编写出来。
iPhone和iPod Touch使用基于ARM架构的中央处理器,而不是苹果的Mac计算机使用的x86处理器。因此,Mac OS X 上的应用程序不能直接复制到iOS上运行。他们需要针对iOS的ARM重新编写。
扩展资料许多重要的技术和 Ajax 开发模式可以从现有的知识中获取。例如,在一个发送请求到服务端的应用中,必须包含请求顺序、优先级、超时响应、错误处理及回调,其中许多元素已经在Web 服务中包含了。同时,随着技术的成熟还会有许多地方需要改进,特别是UI部分的易用性。
Ajax 开发与传统的 B/S开发有很大的不同。这些不同引入了新的编程问题,最大的问题在于易用性。由于 Ajax 依赖浏览器的 JavaScript 和XML,浏览器的兼容性和支持的标准也变得和 JavaScript 的运行时性能一样重要了。这些问题中的大部分来源于浏览器、服务器和技术的组合,因此必须理解如何才能最好的使用这些技术。
参考资料:百度百科-IOS
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)