导航:首页 > 编程语言 > js调用app

js调用app

发布时间:2025-08-30 16:19:25

㈠ 用js怎么实现打开app的功能

1、用户第一次访问抄宣传页面
a、点击袭Banner,进入到APP Store中对应的APP下载页
b、APP下载页中提示:安装;用户点击安装
c、安装完成后,APP下载页中提示:打开;用户继续点击打开
d、用户正常使用APP
2、用户第二次访问宣传页面
a、点击Banner,进入到APP Store中对应的APP下载页
b、APP下载页中提示:打开;用户直接点击打开
c、用户正常使用APP
3、用户第三次、第四次、...、第N次访问,操作步骤同2

㈡ 用js怎么实现打开app的功能

使用windows定时任务运行批处理程序(bat)打开固定页面来实现定时调用。 页面中可以在打开页面时直接调用js或者webservice接口。和定时调用action原理一样

㈢ 如何获取app版本号,通过js

可以把全局变量放入app.js的globalData对象中:

globalData: {

a: "abc",

b: 123

}

这样在index.js或者其他page中就可以这样引用

app单窢厕喝丿估搽台敞郡.globalData.a

app.globalData.b

㈣ 如何实现 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 的 函数调用这个 callback(类似 jsonp 的机制)。
注意,这样封装的接口,天然是异步接口。因为 js_sendMessageToNativeAsync 这个函数会立即返回,不会等到执行结果发回来。
所以,我们要想办法把 js 代码“阻塞”住。
请回忆一下,js 中是用什么方法能把 UI 线程代码“阻塞”住,同时又不跑满 CPU?

1
2
3
4

var async = false;
var url = 'http://.com';
var method = 'GET';<br>var req = new XMLHttpRequest();<br>
req.open(method, url, async);<br>req.send(null);

“同步”ajax(其实没这个词,ajax 内涵异步的意思)可以!在 的响应没返回之前,这段代码会一直阻塞。一般来说同步请求是不允许使用的,有导致 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 对象,就不赘述了。

㈤ 如何用js 调用 AppCan 退出程序

uexWidow.back()是在同一个窗口中的回退事件。由于在手机webkit中,historay.back()有bug,所里封装了专uexWindow.back(),作用都是一样的。在服属务器端页面也适用。uexWindow.open是新开一个窗口。要回到前一个窗口,可使用uexWindow.windowBack();

阅读全文

与js调用app相关的资料

热点内容
linux文件缓冲区 浏览:178
ios微信发送word文件 浏览:155
云盘文件如何转存 浏览:205
龙之谷卸载文件名称 浏览:33
用宏给文件批量加密 浏览:449
qq空间相片密码解锁 浏览:776
小码王核桃编程怎么样 浏览:365
新408导航升级 浏览:190
如何建立安全的网站 浏览:173
安卓通讯录文件夹 浏览:324
为什么word文档保存后找不到文件 浏览:227
win10共享文件权利 浏览:792
java工厂备件管理系统 浏览:819
仙境传说铝盾1洞升级 浏览:262
扫描完文件怎么保存 浏览:778
能识别wOrd文件的播放器 浏览:900
租号玩app如何买保障 浏览:731
混沌雷修几个版本 浏览:997
选举问题用vb程序编写 浏览:106
js函数的递归调用函数返回值 浏览:767

友情链接