HarmonyOS NEXT 版本支持的 JSAPI
啟動參數
HarmonyOS NEXT 啟動參數僅支持以下 key。
名稱 | 縮寫 | 類型 | 說明 | 默認值 | pushWindow 是否可用 |
url | - | string | 起始 URL |
| 是 |
defaultTitle | dt | string | 默認標題,在頁面第一次加載之前顯示在標題欄上。 |
| 是 |
showTitleBar | sl | string | true/false,是否顯示標題欄。 |
| 是 |
readTitle | rt | string | YES/NO,是否讀取網頁標題顯示在 titleBar 上。 |
| 是 |
backgroundColor | bc | int | 設置背景顏色(十進制,例如:bc=16775138)。 |
| - |
showOptionMenu | so | bool | YES/NO,是否顯示右上角的“...”按鈕。 | 對于 H5App 為 | - |
showBackButton | -- | string | YES/NO,是否顯示左上角返回按鈕。 |
| 是 |
centerTitle | -- | string | YES/NO,標題是否居中。 |
| 是 |
showBackButton | -- | String | YES/NO,是否顯示返回鍵。 |
| 是 |
showBottomLine | -- | String | YES/NO,是否顯示 Titlebar 底部分割線。 | | 是 |
embedPage | -- | String | YES/NO,是否是內嵌頁面。 | | 是 |
buttonColor | -- | String | Titlebar 按鈕顏色值,默認是 0xFF333333。 |
| 是 |
scrollForward | -- | Number | WebView 滾動沖突時的模式設置。 0:NestedScrollMode.SELF_ONLY 1:NestedScrollMode.SELF_FIRST 2:NestedScrollMode.PARENT_FIRST 3:NestedScrollMode.PARALLEL | | 是 |
scrollBackward | -- | Number | WebView 滾動沖突時的模式設置。 0:NestedScrollMode.SELF_ONLY 1:NestedScrollMode.SELF_FIRST 2:NestedScrollMode.PARENT_FIRST 3:NestedScrollMode.PARALLEL | | 是 |
webBackground | -- | String | Web 背景色。
顏色值表示具體的顏色,比如: |
| 是 |
bottomSafe | -- | String | YES/NO,是否保留底部安全區域,避免 Web 內容和底部系統導航沖突。 | | 是 |
forceStatusBar | -- | String | YES/NO,是否強制顯示頂部狀態欄。 | | 是 |
showOptionMenu | -- | String | YES/NO,是否顯示Titlebar 的菜單。 | | 是 |
事件擴展
初始化操作
function ready(callback) {
// 如果 jsbridge 已經注入則直接調用
if (window.AlipayJSBridge) {
callback && callback();
} else {
// 如果沒有注入則監聽注入的事件
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
點擊標題欄
document.addEventListener('titleClick', function(e) {
alert('title clicked')
}, false);
點擊副標題
document.addEventListener('subtitleClick', function (e) {
alert('subtitle clicked')
}, false);
頁面壓后臺
document.addEventListener('pause', function(e) {
alert("pause");
}, false);
頁面恢復運行
document.addEventListener('resume', function(e) {
console.log("resumed");
}, false);
點擊右上角按鈕
document.addEventListener('optionMenu', function (e) {
alert("option menu clicked");
}, false);
回退
// 首先屏蔽默認行為,然后調用頁面跳轉 API 進行手動控制
document.addEventListener('back', function(e) {
e.preventDefault();
console.log('do something...')
AlipayJSBridge.call('popWindow');
}, false);
添加通知
AlipayJSBridge.call('addNotifyListener', {
name:'fortest'
}, function (result) {
console.log(result);
});
移除通知
AlipayJSBridge.call('removeNotifyListener', {
name: 'fortest'
}, function (result) {
console.log(result);
});
分發消息
AlipayJSBridge.call('postNotification', {
name:'fortest',
data:{}
}, function (result) {
console.log(result);
});
頁面上下文
打開新頁面
// 打開淘寶首頁,自動讀取 title,并且去除右邊菜單按鈕
AlipayJSBridge.call('pushWindow', {
url: 'https://m.taobao.com/', // 要打開頁面的 URL
// 打開頁面的配置參數
param: {
readTitle: true, //自動讀取 title
showOptionMenu: false // 隱藏右邊菜單
},
// 用于給新開的頁面傳遞參數,可選
// 在新開的頁面使用 AlipayJSBridge.startupParams 可以獲取到 passData
passData: {
key1: "key1Value",
key2: "key2Value"
}
});
關閉當前頁面
AlipayJSBridge.call('popWindow');
啟動其他應用
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
});
退出當前應用
AlipayJSBridge.call('exitApp');
界面
警告框
AlipayJSBridge.call('alert', {
title: '親',
message: '你好',
button: '確定'
}, function(e) {
alert(JSON.stringify(e));
});
確認框
AlipayJSBridge.call('confirm', {
title: '親',
message: '確定要退出嗎?',
okButton: '是',
cancelButton: '否'
}, function(e) {
alert(JSON.stringify(e));
});
弱提示
AlipayJSBridge.call('toast', {
content: '操作成功',
type: 'success',
duration: 2000
}, function() {
alert("toast消失后執行");
});
// 可以通過 hideToast 接口隱藏已經彈出的 toast
AlipayJSBridge.call('hideToast', {}, function() {
});
選擇列表
AlipayJSBridge.call('actionSheet', {
'title': '標題',
'btns': ['第一個按鈕', '第二個按鈕', '第三個按鈕'],
'cancelBtn': '取消',
'destructiveBtnIndex': 2
}, function(data) {
switch (data.index) { // index 標示用戶點擊的按鈕在 actionSheet 中的位置,從 0 開始
case 0:
alert('第一個按鈕');
break;
case 1:
alert('第二個按鈕');
break;
case 2:
alert('第三個按鈕');
break;
case 3:
alert('取消按鈕');
break;
}
});
設置標題
AlipayJSBridge.call('setTitle', {
title: '標題',
});
設置導航欄背景色
AlipayJSBridge.call("setTitleColor", {
color: 16775138
});
顯示右上角按鈕
AlipayJSBridge.call('showOptionMenu');
設置右上角按鈕
AlipayJSBridge.call('setOptionMenu', {
xx // 參考入參
});
入參:
屬性 | 類型 | 描述 | 必填 | 默認值 |
title | string | 右按鈕文字。 | Y | “” |
icon | string | 右按鈕圖標 URL,base64(since 9.0)。 8.3 及以前版本:iOS 40x40(周邊不留白),Android 50x50(四邊各透明留白 5px)。 8.4 及以后版本:兩個平臺統一使用 40x40(周邊不留白)。 | Y | “” |
reset | bool | 重置為系統默認,當 reset=true 時,忽略其他參數。 | Y | false |
color | string | 文字顏色值。 | N | “#FFFFFFFF” |
override | bool | 在需要設置多個 option 的情況下,是否保留默認的 optionMenu。 | N | false |
menus | array | 設置多個按鈕。 | N | [ ] |
preventDefault | bool | 是否阻止默認的分享功能(默認是彈分享框)preventDefault=true 時,會阻止默認的分享。 | N | [ ] |
icontype | string | 根據圖片類型加載容器預置圖片,與 title、icon 三選一。 重要 具體類型包含 user(賬戶)、filter(篩選器)、search(查找)、add(添加)、settings(設置)、scan(掃一掃)、info(信息)、help(幫助)、locate(定位)、more(更多)、mail(郵箱)。 | N | “” |
隱藏右上角按鈕
AlipayJSBridge.call('hideOptionMenu');
顯示加載中
AlipayJSBridge.call('showLoading', {
text: '加載中',
});
隱藏加載中
AlipayJSBridge.call('hideLoading');
顯示標題欄加載中
AlipayJSBridge.call('showTitleLoading');
隱藏標題欄加載中
AlipayJSBridge.call('hideTitleLoading');
設置導航欄底部細線顏色
AlipayJSBridge.call("setBarBottomLineColor", {
color: 16711688
});
設置 pop 菜單
AlipayJSBridge.call('showPopMenu');
AlipayJSBridge.call('setToolbarMenu');
隱藏/顯示返回按鈕
AlipayJSBridge.call('showBackButton');
AlipayJSBridge.call('hideBackButton');
工具類
獲取容器的啟動參數
AlipayJSBridge.call('getStartupParams', {
key: ['url', 'xxx'] // 可選,根據 key 值過濾返回結果,不填返回全部
}, function(result) {
console.log(result);
});
RPC 調用
AlipayJSBridge.call('rpc', {
operationType: 'alipay.client.xxxx',
requestData: [],
headers: {}
}, function(result) {
console.log(result);
});
設置 AP 數據
AlipayJSBridge.call('setAPDataStorage', {
type: "common",
business: "customBusinessKey",
key: "customKey",
value: "customValue"
}, function(result) {
alert(JSON.stringify(result));
});
獲取 AP 數據
AlipayJSBridge.call('getAPDataStorage', {
type, business, key
});
移除 AP 數據
AlipayJSBridge.call('removeAPDataStorage', {
type: "common",
business: "customBusinessKey",
key: "customKey",
}, function(result) {
alert(JSON.stringify(result));
});
不支持的 JSAPI 列表
Native 功能
目前不支持掃碼解析。
AlipayJSBridge.call('scan', {
type: 'bar',
actionType: 'scan'
}, function(result) {
alert(JSON.stringify(result));
});
替代方案
由業務實現,注冊對應的 JSAPI,并在 API 里調用 mPaaS 掃碼組件或者系統接口。
工具類
目前不支持截屏。
AlipayJSBridge.call('snapshot', function(result) { console.log(result.success); });
替代方案
由業務實現,注冊對應 JSAPI,并在 API 里調用系統接口。
export class H5CustomPlugin extends H5SimplePlugin { static pageInfos?: NavPathStack onPrepare(filter: H5EventFilter): void { filter.addAction('snapshot') } handleEvent(event: H5Event, context: H5BridgeContext): Boolean { if ('snapshot' == event.action) { let page = event.target as Page componentSnapshot.get(page.webComponentId, (error: Error, pixmap: image.PixelMap) => { if (error) { console.log("error: " + JSON.stringify(error)) return; } // pixmap 截圖結果 }) return true } return super.handleEvent(event, context); } }
目前不支持上報埋點。
AlipayJSBridge.call('remoteLog', { bizType: "Nebula", // 業務類型 logLevel: 1, // 1 - high, 2 - medium, 3 - low actionId: "event", // 埋點類型,固定為 "event" seedId: "Login", // 埋點唯一標識 param1: "", param2: "", param3: "", param4: {key1:"value1",key2:"value2"}, // 自定義參數 });