View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0007975 | module PayPal Checkout | module PayPal checkout - sub | public | 2026-07-08 13:13 | 2026-07-23 22:58 |
| Reporter | eWorks GmbH | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | assigned | Resolution | open | ||
| Product Version | 2.9.1 / 3.8.1 | ||||
| Fixed in Version | 2.9.2 / 3.8.2 | ||||
| Summary | 0007975: Javascript Fehler "Can't find variable: ApplePayPaymentController" | ||||
| Description | Laut unseren Logs tritt der Fehler im vierten Bestellschritt (cl=order) auf und wird durch https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/views/tpl/shared/applepay.tpl#L430 ausgelöst. Die Ursache liegt dabei in der Minifizierung von https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/resources/build/js/paypal-frontend-applepay-payment-controller.js In https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/out/src/js/paypal-frontend.min.js ist aus der paypal-frontend-applepay-payment-controller.js das hier geworden. ( ()=>{ function e(e){ return PayPalPaymentControllerBase.call(this,e),this.resetCurrentOrder(),this } window.addEventListener("load",function(){ void 0===window.PayPalPayment&&void 0!==window.ApplePayPayPalPaymentControllerConfiguratorDefaults&&(window.PayPalPayment=new e) }) }) () Der Funktionsname ApplePayPaymentController wurde also gefressen und steht dem Template oben nicht mehr zur Verfügung. Lustigerweise scheint der Fehler aber keine Auswirkung auf den eigentlichen Bestellabschluss zu haben, da die betroffenen Kunden ihre ApplePay Bestellung ungehindert abschließen können. Daher das Thema hier mal als kleinen Fehler eingestuft, der uns nur in den Logs auf die Nerven geht :) | ||||
| Steps To Reproduce | Leider noch keinen Weg gefunden es zu reproduzieren, allerdings treten mehrfach am Tag Meldungen dieser Art bei Kunden mit iPhone (aktuelle IOS Version) und Safari im Shop auf. | ||||
| Tags | No tags attached. | ||||
|
|
Der eigentliche Bug liegt nicht in der Minifizierung selbst, sondern tiefer. Hier die konkrete fehlerhafte Stelle: https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/views/tpl/shared/applepay.tpl#L430 window.addEventListener('load', function () { window.PayPalPayment = new ApplePayPaymentController(window.PayPalPaymentControllerConfiguratorDefaults); window.PayPalPayment.renderButton(typeof PayPalButtonStyle === 'object' ? PayPalButtonStyle : {}); }); Zwei Fehler in dieser einen Zeile (430): 1. ApplePayPaymentController existiert nirgends global https://github.com/OXID-eSales/paypal-module/blob/b5dae8060634d4e6d2b6a93eb3bd2be60ae60e6f/resources/build/js/paypal-frontend-applepay-payment-controller.js#L2 let ApplePayPaymentController = function (config) Der Hauptgrund ist Scope-Kapselung: Alles, was innerhalb der IIFE mit let, const oder var deklariert wird, bleibt lokal und "leakt" nicht in den globalen window-Scope. Trotzdem versucht applepay.tpl am Ende einenload-Listener zu registrieren: Dieser Code greift direkt auf den Bezeichner ApplePayPaymentController zu, der aber im globalen Scope des Templates gar nicht existiert 2. window.PayPalPaymentControllerConfiguratorDefaults ist ein Tippfehler. Oben im selben Script wird tatsächlich gesetzt: js window.ApplePayPayPalPaymentControllerConfiguratorDefaults = { ... } Der Name im load-Listener passt also nicht mal zur eigenen Variable weiter oben im selben Template. |
|
|
The redundant duplicate event listener in the template is being removed. |