此接口用于跨包打开 mPaaS 应用内的其他 H5 应用(离线包)。
startApp 接口的使用方法
AlipayJSBridge.call('startApp', {
appId: '90000000',
param: {
url: '/index.html'
}
}, function(result) {
// noop
});
// 注意,如果要打开多个 App 实例:
// 请将 appClearTop 和 startMultApp 都放在 param 里
AlipayJSBridge.call('startApp', {
appId: '90000000',
param: {
url: location.href,
appClearTop: false,
startMultApp: 'YES' // 注意这个值是 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>
默认只开一个 appId 实例:
<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, } }, function(result) { // noop }); }); }); </script>
打开多个相同 appId 的应用:
<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: '90000000', param: { url: '/index.html', appClearTop: false, startMultApp: 'YES' // 注意这个值是 YES,而不是 bool 类型 } }, function(result) { // noop }); }); }); </script>
API 说明
AlipayJSBridge.call('startApp', {
appId, param: {}, closeCurrentApp
}, fn)
入参
名称 | 类型 | 描述 | 必选 | 默认值 | 基线 |
appId | string | 离线包 ID。 | Y | “” | - |
param | dictionary | 启动应用的参数, 由具体业务应用定义。如打开离线包时需指定 URL,请在 param 中配置。若要运行多个实例,参见下方 注意事项。 | N | value 值支持字符、 bool、int、double | - |
closeCurrentApp | bool | 是否先退出当前 App 再启动新的 App。适用于页面用作中转页的情况。 | N | - | >10.1.60 |
fn | function | 调用失败后的回调函数。 | N | - | - |
错误码描述
错误码 | 描述 |
10 | 指定 appId 无效。 |
11 | 启动 App 失败。 |
注意事项
startApp
是用来打开 App 的,因此其定位是 App 级别,在这一点上与pushWindow
不同。默认情况下,如果当前 App 已经打开了,再次使用
startApp
打开 App 时,会进行一个类似重启的操作。也就是说不会出现同时运行两个具有相同 appId 的实例的情况。假如一个 appId 要运行多个实例,那么请在 param 参数中添加
appClearTop=false&startMultApp=YES
选项。
文档内容是否对您有帮助?