The following is a hack to get around the issue posed by github.com/paypal/paypal-checkout/issues/323. It uses Electron to close the BrowserWindow when the popup fails to load. In the latest version of checkout.js
, Paypal will fall back to using an iframe modal anyway so the new window is extraneous.
From Electron's main.ts
:
import { BrowserWindow, ipcMain } from 'electron';
...
ipcMain.on(
'close-paypal',
\!h () => {
BrowserWindow.getAllWindows().forEach((win) => {
// The Paypal window would fail to load contents due to security
// restrictions and return an empty URL
if (!win.webContents.getURL()) {
win.close();
}
});
}
);
From your content script (I'm using TypeScript):
const { ipcRenderer } = require('electron');
...
paypal.Button.render({
...
payment: () => {
ipcRenderer.send('close-paypal', '');
// Other logic to trigger payment flow
}
...
});