用于打开钱包内的其他appId,效果等同scheme方式,但结构更加清晰,很多参数也无需额外encode,因此支付宝客户端内推荐使用该接口。
AlipayJSBridge.call('startApp', {
appId: '20000042',
param: {
publicId: 'xxxxxx'
},
closeCurrentApp: false
}, function(result) {
// noop
});
// 注意,如果要打开多个app实例:
// 请使用:appClearTop和startMultApp都放在param里
AlipayJSBridge.call('startApp', {
appId: '20000067',
param: {
url: location.href,
appClearTop: false,
startMultApp: 'YES' // 9.9.3引入新参数进行多开,注意这个值是YES,而不是bool类型
}
}, function(result) {
// noop
});
<h1>点击按钮查看效果</h1>
<a href="javascript:void(0)" class="btn dream">打开心愿储蓄</a>
<script>
function ready(callback) {
// 如果jsbridge已经注入则直接调用
if (window.AlipayJSBridge) {
callback && callback();
} else {
// 如果没有注入则监听注入的事件
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
ready(function(){
document.querySelector('.dream').addEventListener('click', function() {
AlipayJSBridge.call('startApp', {
appId: '20000981',
param: {
url: '/www/dream-create.html',
// 启动参数传入
canPullDown: true,
transparentTitle: 'auto'
}
}, function(result) {
// noop
});
});
});
</script>
<h1>点击按钮打开新应用,当前应用会被关闭</h1>
<a href="javascript:void(0)" class="btn forest">打开蚂蚁森林</a>
<script>
function ready(callback) {
// 如果jsbridge已经注入则直接调用
if (window.AlipayJSBridge) {
callback && callback();
} else {
// 如果没有注入则监听注入的事件
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
ready(function() {
document.querySelector('.forest').addEventListener('click', function() {
AlipayJSBridge.call('startApp', {
appId: '60000002',
// 不传入url,就会使用app的默认配置的url
param: {
transparentTitle: 'auto'
},
closeCurrentApp: true
}, function(result) {
// noop
});
});
});
</script>
<h1>尝试再打开当前页面,先退出当前应用,然后再次打开</h1>
<a href="javascript:void(0)" class="btn self">打开当前页面</a>
<script>
function ready(callback) {
// 如果jsbridge已经注入则直接调用
if (window.AlipayJSBridge) {
callback && callback();
} else {
// 如果没有注入则监听注入的事件
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
ready(function(){
document.querySelector('.self').addEventListener('click', function() {
AlipayJSBridge.call('startApp', {
// 当前页面打开的时候,是通过通用应用20000067打开,
// 因此在此startApp的时候,就会把其他的20000067关闭
// 所以这个时候其实还是只有一个当前页面打开
appId: '20000067',
param: {
url: location.href,
},
closeCurrentApp: false // 虽然是指定为false,但是还是会关闭当前页面
}, function(result) {
// noop
});
});
});
</script>
<h1>打开多个相同appId的应用</h1>
<a href="javascript:void(0)" class="btn multi">再开启一个应用</a>
<script>
function ready(callback) {
// 如果jsbridge已经注入则直接调用
if (window.AlipayJSBridge) {
callback && callback();
} else {
// 如果没有注入则监听注入的事件
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
ready(function() {
document.querySelector('.multi').addEventListener('click', function() {
AlipayJSBridge.call('startApp', {
appId: '20000067',
param: {
url: location.href,
appClearTop: false,
startMultApp: 'YES' // 9.9.3引入新参数进行多开,注意这个值是YES,而不是bool类型
}
}, function(result) {
// noop
});
});
});
</script>
AlipayJSBridge.call('startApp', {
appId, param: {}, closeCurrentApp
}, fn)
名称 | 类型 | 描述 | 必选 | 默认值 | 版本 |
---|---|---|---|---|---|
appId | string | 钱包内应用ID | Y | ||
param | dictionary | 启动应用的参数, 由具体业务应用定义 | N | 8.0时value仅支持字符 从8.1开始value增加对bool, int, double的支持 | |
closeCurrentApp | bool | 是否先退出当前app再启动新的app. 适用于页面用作中转页的情况 | N | 8.1 | |
fn | function | 调用失败后的回调函数 | N |
error | 描述 |
---|---|
10 | 指定appId无效; |
11 | 启动app失败; |
startApp
是用来打开app的,因此其定位是app级别,这个和pushWindow
不一样。startApp
打开一个app,默认情况下,假如当前这个app已经被打开了,那么会做一个类似于重启的操作。也就是说不会出现同时运行两个相同appid的实例。appClearTop=false&startMultApp=YES
选项。(请直接添加到scheme中,不要添加到webview_options,appClearTop是钱包框架解析,只解析scheme,不解析webview_options),注意:appClearTop=false 和startMultApp=YES 要写在 startApp的 param参数里。