此接口用于跨包打開 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
選項。
文檔內容是否對您有幫助?