let sender = null; self.addEventListener('message', e => { sender = e.source; if (e.data == 'paymentrequest') { self.dispatchEvent(new PaymentRequestEvent('paymentrequest', { methodData: [{ supportedMethods: 'https://example.com/pay' }], total: { currency: 'USD', value: '100' }, modifiers: [{ supportedMethods: 'https://example.com/pay' }] })); } else if (e.data == 'canmakepayment') { self.dispatchEvent(new CanMakePaymentEvent('canmakepayment', { methodData: [{ supportedMethods: 'https://example.com/pay' }], modifiers: [{ supportedMethods: 'https://example.com/pay' }] })); } }); self.addEventListener('paymentrequest', async e => { const result = []; try { e.respondWith({}); } catch (exception) { result.push(exception.name); } try { await e.openWindow('payment-app/payment.html'); } catch (exception) { result.push(exception.name); } sender.postMessage(result); }); self.addEventListener('canmakepayment', async e => { const result = []; try { e.respondWith({}); } catch (exception) { result.push(exception.name); } sender.postMessage(result); });