此介面用於跨包開啟 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', { // 當前頁面開啟的時候,是通過跨平台 app 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選項。