pushWindow
用于在同一個離線包內打開一個新的頁面,打開時自帶系統轉場動畫。若您需要跨 appId 打開其他離線應用頁面,請使用 startApp 接口。
pushWindow
與前端 location.href
的區別,類似于 PC 瀏覽器的新開標簽頁,每個 window 都是一個新的標簽頁,因此原頁面僅僅是被壓到后臺,狀態始終保持,JS 也會繼續運行。
pushWindow 接口的使用方法
// 打開淘寶首頁,自動讀取 title,并且去除右邊菜單按鈕
AlipayJSBridge.call('pushWindow', {
url: 'https://m.taobao.com/', // 要打開頁面的 URL
// 打開頁面的配置參數
param: {
readTitle: true, //自動讀取 title
showOptionMenu: false // 隱藏右邊菜單
},
// 用于給新開的頁面傳遞參數,可選
// 在新開的頁面使用 AlipayJSBridge.startupParams 可以獲取到 passData
passData: {
key1: "key1Value",
key2: "key2Value"
}
});
對于 Android 應用,需要將參數放在
param: { }
中。對于 iOS 應用,則需要將參數放在
passData: { }
中。
代碼示例
打開淘寶首頁,去除右邊菜單。
<h1>打開淘寶首頁</h1> <a class="btn J_demo">執行</a> <script> function ready(callback) { // 如果 jsbridge 已經注入則直接調用 if (window.AlipayJSBridge) { callback && callback(); } else { // 如果沒有注入則監聽注入的事件 document.addEventListener('AlipayJSBridgeReady', callback, false); } } ready(function(){ document.querySelector('a').addEventListener('click', function() { // 打開淘寶首頁,自動讀取 title,并且去除右邊菜單 AlipayJSBridge.call('pushWindow', { url: 'https://m.taobao.com/', param: { readTitle: true, showOptionMenu: false } }); }); }); </script>
打開時設置透明標題欄。
<h1>打開淘寶首頁</h1> <a class="btn J_demo">執行</a> <script> function ready(callback) { // 如果 jsbridge 已經注入則直接調用 if (window.AlipayJSBridge) { callback && callback(); } else { // 如果沒有注入則監聽注入的事件 document.addEventListener('AlipayJSBridgeReady', callback, false); } } ready(function() { document.querySelector('a').addEventListener('click', function() { AlipayJSBridge.call('pushWindow', { url: 'https://m.taobao.com', param: { transparentTitle: 'auto' } }); }); }); </script>
API 說明
pushWindow 打開 URL 頁面的時候不會關閉已經存在的頁面,注意打開的數量,不要同時開太多而影響性能。
建議同一個應用 pushWindow 的層級不要超過 5 層,否則會影響用戶體驗而且有可能導致應用崩潰。
AlipayJSBridge.call('pushWindow', {
url, param, passData
})
入參
名稱 | 類型 | 描述 | 必選 | 默認值 |
url | string | 要打開的 URL。 | Y | “” |
param | dictionary | 支持的 key/value 對下面的表格。 | N | {} |
passData(僅適用于 iOS) | dictionary | 傳遞的參數,打開頁面使用 | N | {} |
param 參數詳解
名稱 | 類型 | 描述 | 默認值 |
defaultTitle | string | 默認標題,在頁面第一次加載之前顯示在標題欄上。 | “” |
showLoading | bool | 是否在頁面加載前顯示全局菊花。 | false |
readTitle | bool | 是否讀取網頁標題顯示在 titleBar 上。 | true |
pullRefresh | bool | 是否支持下拉刷新只有本地文件允許設置為 true。 | false |
allowsBounceVertical | bool | 頁面是否支持縱向拽拉超出實際內容,Android 只支持下拉(顯示出背景或者域名)。只有 | true |
bounceTopColor | int | 下拉超出時,頂部間隙顏色(十進制,例如:bc=16775138)。 | - |
showTitleLoading | bool | 是否在 TitleBar 的標題左邊顯示小菊花。 | false |
transparentTitle | string | 不能與 1、 2、 3、 | - |
titleBarColor | int | 自定義 titlebar 的背景色(十進制,例如:bc=16775138)。 重要 不能與 | - |
scrollDistance | int | 在 | 80(iOS) |
titleImage | string | 所要使用的 title 圖片地址,請上傳一張 3X PNG 圖,只影響當前的 VC, | “” |
closeCurrentWindow | bool | 打開窗口的同時,關閉當前窗口。 | false |
closeAllWindow | bool | 打開窗口的同時,關閉當前 App 的所有窗口。 | false |
animationType | string | 動畫類型,默認為 “push”,可用枚舉 “none”/“push”。 重要 Android 未實現,均無動畫。 | “” |
pushWindow 參數默認繼承
名稱 | 繼承 | 備注 |
url | Y | - |
defaultTitle | Y | - |
backBehavior | Y | 優先用戶指定,否則 pop。 |
showLoading | Y | - |
readTitle | Y | - |
pullRefresh | Y | - |
toolbarMenu | Y | - |
showProgress | Y | - |
defaultSubtitle | Y | - |
backgroundColor | Y | - |
canPullDown | Y | - |
showOptionMenu | Y | - |
showTitleLoading | Y | - |
showDomain | Y | - |
pushWindow 和 location.href 的區別
您可以根據以下內容理解 pushWindow
和 location.href
的區別:
首先把 Nebula 容器理解為一個 PC 瀏覽器。
window 可以理解為標簽頁,location.href 就是正常的標簽跳轉。
pushWindow 實際上就是新開了一個標簽頁,并且把之前那一頁壓到下面,push 出來的這頁放在頂層展現。此時被壓到下面的上一頁所有狀態均保留。
location.href 就是依然停留在這個標簽頁,直接做頁面跳轉。
當 pushWindow 出來的標簽頁被關閉(pop)時,如果之前還有 window 存在,那么之前那個 window 就會恢復顯示,并觸發
resume
。