javascript教程app(javascript源码下载)
大家好,今天小编来为大家解答javascript教程app这个问题,javascript源码下载很多人还不知道,现在让我们一起来看看吧!
JavaScript开发App需要掌握哪些知识
javascript最常应用的场合是 Web页面,因此,与WEB开发相关的知识,最好要有所了解。
优先级高的相关知识:
1. HTML,这是基本,最好自己能用记事本写一些静态的html,来加深印象。
2. DHTML,这是 javascript编程所要遇到的宿主对象,你要对这个对象进行访问或控制。(加点说明吧,javascript不单能运行在如IE之类的浏览器上,也可以直接在操作系统上运行,还可以在WEB服务器上运行,还可以在。。。,这运行的平台就是宿主,每个宿主有自己的对象。)
3. CSS,样式,这也是必须的。
4.后台编程语言,特别是一些输出标签,这样,和后台工程师合作就会顺利得多。
5.美工,这个不是很重要。
6. XML,数据库。这些最好也要有所了解。
7. Flash,了解如何进行通讯就可,不一定用得上。
8. js framwork,网上当前比较流行的javascript框架,如yahoo yui, jquery, prototype....有很多,大致了解几种,用时再细学,对于应用来说,有个大概就行了。
9.调试开发工具,有 eclipse,也有其它专用的,还有 firebug,一个很有名的浏览器(Firefox, google chorm)插件,IE下么有个 devlopment tool,嗯,英文不好,拼错了别怪。
如何实现 javascript “同步”调用 app 代码
在 App混合开发中,app层向 js层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论)。为了保证 web流畅,大部分时候,我们应该使用异步接口,但是某些情况下,我们可能更需要同步接口。同步接口的好处在于,首先 js可以通过返回值得到执行结果;其次,在混合式开发中,app层导出的某些 api按照语义就应该是同步的,否则会很奇怪——一个可能在 for循环中使用的,执行非常快的接口,比如读写某个配置项,设计成异步会很奇怪。
那么如何向 js层导出同步接口呢?
我们知道,在 Android框架中,通过 WebView.addJavascriptInterface()这个函数,可以将 java接口导出到 js层,并且这样导出的接口是同步接口。但是在 iOS的 Cocoa框架中,想导出同步接口却不容易,究其原因,是因为 UIWebView和 WKWebView没有 addJavascriptInterface这样的功能。同时,Android这个功能爆出过安全漏洞,那么,我们有没有别的方式实现同步调用呢?我们以 iOS UIWebView为例提供一种实现,WKWebView和 Android也可以参考。
为了找到问题的关键,我们看一下 iOS中实现 js调用 app的通行方法:
首先,自定义 UIWebViewDelegate,在函数 shouldStartLoadWithRequest:navigationType:中拦截请求。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-(BOOL) webView:(UIWebView* _Nonnull)webView
shouldStartLoadWithRequest:(NSURLRequest* _Nonnull)request
navigationType:(UIWebViewNavigationType)navigationType{
if([request.HTTPMethod compare:@"GET" options:NSCaseInsensitiveSearch]!= NSOrderedSame){
//不处理非 get请求
return YES;
}
NSURL* url= request.URL;
if([url.scheme isEqualToString:@'YourCustomProtocol']){
return [self onMyRequest:request];
}
return YES;
}
这种做法实质上就是将函数调用命令转化为 url,通过请求的方式通知 app层,其中 onMyRequest:是自定义的 request响应函数。为了发送请求,js层要建立一个隐藏的 iframe元素,每次发送请求时修改 iframe元素的 src属性,app即可拦截到相应请求。
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* js向 native传递消息
*@method js_sendMessageToNativeAsync
*@memberof JSToNativeIOSPolyfill
*@public
*@param str{String}消息字符串,由 HybridMessage转换而来
*/
JSToNativeIOSPolyfill.prototype.js_sendMessageToNativeAsync= function(str){
if(!this.ifr_){
this._prepareIfr();
}
this.ifr_.src='YourCustomProtocol://__message_send__?msg='+ encodeURIComponent(str);}
当 app执行完 js调用的功能,执行结果无法直接返回,为了返回结果,普遍采用回调函数方式——js层记录一个 callback,app通过 UIWebView的 stringByEvaluatingJavaScriptFromString函数调用这个 callback(类似 jsonp的机制)。
注意,这样封装的接口,天然是异步接口。因为 js_sendMessageToNativeAsync这个函数会立即返回,不会等到执行结果发回来。
所以,我们要想办法把 js代码“阻塞”住。
请回忆一下,js中是用什么方法能把 UI线程代码“阻塞”住,同时又不跑满 CPU?
1
2
3
4
var async= false;
var url=';;
var method='GET';<br>var req= new XMLHttpRequest();<br>
req.open(method, url, async);<br>req.send(null);
“同步”ajax(其实没这个词,ajax内涵异步的意思)可以!在 baidu的响应没返回之前,这段代码会一直阻塞。一般来说同步请求是不允许使用的,有导致 UI卡顿的风险。但是在这里因为我们并不会真的去远端请求内容,所以不妨一用。
至此实现方式已经比较清楚了,梳理一下思路:
使用同步 XMLHttpRequest配合特殊构造的 URL通知 app层。
app层拦截请求执行功能,将结果作为 Response返回。
XMLHttpRequest.send()返回,通过 status和 responseText得到结果。
那么,如何拦截请求呢?大家知道,UIWebViewDelegate是不会拦截 XMLHttpRequest请求的,但是 iOS至少给了我们两个位置拦截这类请求——NSURLCache和 NSURLProtocol。
一、NSURLCache是 iOS中用来实现自定义缓存的类,当你创建了自定义的 NSURLCache子类对象,并将其设置为全局缓存管理器,所有的请求都会先到这里检查有无缓存(如果你没禁掉缓存的话)。我们可以借助这个性质拦截到接口调用请求,执行并返回数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-(NSCachedURLResponse*) cachedResponseForRequest:(NSURLRequest*)request{
if([request.HTTPMethod compare:@"GET" options:NSCaseInsensitiveSearch]!= NSOrderedSame){
//只对 get请求做自定义处理
return [super cachedResponseForRequest:request];
}
NSURL* url= request.URL;
NSString* path= url.path;
NSString* query= url.query;
if(path== nil|| query== nil){
return [super cachedResponseForRequest:request];
}
LOGF(@"url=%@, path=%@, query=%@", url, path, query);
if([path isEqualToString:@"__env_get__"]){
//读环境变量
return [self getEnvValueByURL:url];//*
} else if([path isEqualToString:@"__env_set__"]){
//写环境变量
return [self setEnvValueByURL:url];
}
return [super cachedResponseForRequest:request];
}
注意注释有*号的一行,即是执行 app接口,返回结果。这里的结果是一个 NSCachedResponse对象,就不赘述了。
怎样用html和javascript制作离线手机app
利用html(HTML5)、CSS(CSS3)以及Javascript、响应式设计、PhoneGap等可以制作混合APP。
1、使用CSS3媒体查询制作响应式页面,以确保在不同的屏幕分辨率下都能很好的显示。或者也可以以remnant(rem)单位,将固定宽高换乘为remnant。
2、远程数据获取,要使用跨域请求。
3、页面特效使用Javascript或是CSS动画实现。
4、使用PhoneGap进行APP打包,将网页应用转化为APP。
好了,文章到此结束,希望可以帮助到大家。