用于打开钱包内的其他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参数里。