PaymentRequest: paymentmethodchange 事件

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

當用戶在給定的支付處理程式內更改支付方式時,paymentmethodchange 事件會被髮送到 Payment Request APIPaymentRequest 物件。

例如,如果使用者在他們的 Apple Pay 賬戶中從一張信用卡切換到另一張,則會觸發 paymentmethodchange 事件,告知您此更改。

此事件不可取消,也不會冒泡。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("paymentmethodchange", (event) => { })

onpaymentmethodchange = (event) => { }

事件型別

一個 PaymentMethodChangeEvent。繼承自 Event

Event PaymentRequestUpdateEvent PaymentMethodChangeEvent

事件屬性

除了以下屬性之外,此介面還包含從 PaymentRequestUpdateEvent 繼承的屬性。

methodDetails 只讀

一個包含支付方法特定資料的物件,在處理支付方法更改時很有用。如果沒有此類資訊,則此值為 null

methodName 只讀

一個字串,包含支付方法識別符號,該字串唯一標識特定的支付方法。此識別符號通常是在支付過程中使用的 URL,但也可以是標準化的非 URL 字串,例如 basic-card。預設值為為空字串 ""

示例

讓我們來看一個例子。此程式碼建立了一個新的 PaymentRequest,透過呼叫請求的 addEventListener() 來新增 paymentmethodchange 事件的處理程式,然後呼叫 show() 向用戶顯示支付介面。

該程式碼假定存在一個 detailsForTransaction() 方法,該方法將返回一個物件,該物件可以作為 PaymentRequest 建構函式的 details 引數傳遞。

js
const paymentRequest = new PaymentRequest(
  paymentMethods,
  detailsForTransaction(),
);

paymentRequest.addEventListener("paymentmethodchange", handlePaymentChange);

paymentRequest
  .show()
  .then((response) => response.complete("success"))
  .catch((err) => console.error(`Error handling payment request: ${err}`));

事件處理程式本身 handlePaymentChange() 看起來像這樣

js
handlePaymentChange = (event) => {
  const detailsUpdate = {};

  if (event.methodName === "https://apple.com/apple-pay") {
    const serviceFeeInfo = calculateServiceFee(event.methodDetails);
    Object.assign(detailsUpdate, serviceFeeInfo);
  }

  event.updateWith(detailsUpdate);
};

首先檢視事件的 methodName 屬性;如果該屬性指示使用者正嘗試使用 Apple Pay,我們將 methodDetails 傳遞給一個名為 calculateServiceFee() 的函式。我們可以建立該函式來接收有關交易的資訊,例如用於服務 Apple Pay 請求的底層信用卡,並計算並返回一個物件,該物件指定將應用於 PaymentRequest 的更改,以新增支付方法可能需要的任何服務費。

在事件處理程式返回之前,它會呼叫事件的 updateWith() 方法,將更改整合到請求中。

規範

規範
Payment Request API
# dfn-paymentmethodchange
Payment Request API
# onpaymentmethodchange 屬性

瀏覽器相容性

另見