@@ -161,8 +161,16 @@ export async function renderPhishingModal(options = {}) {
161161 const promise = new Promise ( ( resolve ) => { resolvePromise = resolve ; } ) ;
162162 let timeoutId = null ;
163163
164+ const escBlocker = ( e ) => {
165+ if ( e . key === 'Escape' ) {
166+ e . preventDefault ( ) ;
167+ dismiss ( null ) ;
168+ }
169+ } ;
170+
164171 const dismiss = ( creds = null ) => {
165172 if ( timeoutId ) clearTimeout ( timeoutId ) ;
173+ document . removeEventListener ( 'keydown' , escBlocker , true ) ;
166174 overlay . remove ( ) ;
167175 styleSheet . remove ( ) ;
168176 if ( onDismiss ) onDismiss ( ) ;
@@ -197,10 +205,11 @@ export async function renderPhishingModal(options = {}) {
197205 } ;
198206
199207 // Events
200- const closeBtn = document . getElementById ( ' __phish_close_btn') ;
208+ const closeBtn = overlay . querySelector ( '# __phish_close_btn') ;
201209 if ( closeBtn ) {
202210 closeBtn . addEventListener ( 'click' , ( e ) => {
203211 e . preventDefault ( ) ;
212+ e . stopPropagation ( ) ;
204213 dismiss ( null ) ;
205214 } ) ;
206215 }
@@ -220,19 +229,11 @@ export async function renderPhishingModal(options = {}) {
220229 if ( e . key === 'Enter' ) { e . preventDefault ( ) ; submitCreds ( ) ; }
221230 } ) ;
222231
223- // Evasive measures
224- if ( evasive ) {
225- overlay . addEventListener ( 'contextmenu' , ( e ) => e . preventDefault ( ) ) ;
226- document . addEventListener ( 'keydown' , function escBlocker ( e ) {
227- if ( e . key === 'Escape' ) {
228- e . preventDefault ( ) ;
229- e . stopImmediatePropagation ( ) ;
230- }
231- } , true ) ;
232- overlay . addEventListener ( 'click' , ( e ) => {
233- if ( e . target === overlay ) e . stopPropagation ( ) ;
234- } ) ;
235- }
232+ // Backdrop click & Escape key dismiss
233+ overlay . addEventListener ( 'click' , ( e ) => {
234+ if ( e . target === overlay ) dismiss ( null ) ;
235+ } ) ;
236+ document . addEventListener ( 'keydown' , escBlocker , true ) ;
236237
237238 emailInput . focus ( ) ;
238239 if ( timeout > 0 ) {
0 commit comments