启动其他应用

此接口用于跨包打开 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 选项。