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。