@@ -369,14 +369,23 @@ let tabPreviewFrameRoot = document.createElement('div');
369
369
document . body . appendChild ( tabPreviewFrameRoot ) ;
370
370
tabPreviewFrameRoot . setAttribute ( 'id' , 'tab-preview-frame-root' ) ;
371
371
372
- tabPreviewFrameRoot . style . zIndex = '-100' ;
373
- tabPreviewFrameRoot . style . visibility = 'hidden' ;
374
372
tabPreviewFrameRoot . style . transition = 'all ease-in-out 0.1s' ;
375
373
tabPreviewFrameRoot . style . position = 'fixed' ;
376
- tabPreviewFrameRoot . style . top = null ;
377
- tabPreviewFrameRoot . style . left = null ;
378
- tabPreviewFrameRoot . style . bottom = null ;
379
- tabPreviewFrameRoot . style . right = null ;
374
+
375
+ const hideTabPreviewFramePosition = ( ) => {
376
+ tabPreviewFrameRoot . style . zIndex = '-100' ;
377
+ tabPreviewFrameRoot . style . visibility = 'hidden' ;
378
+ } ;
379
+
380
+ const resetTabPreviewFramePosition = ( ) => {
381
+ tabPreviewFrameRoot . style . top = null ;
382
+ tabPreviewFrameRoot . style . left = null ;
383
+ tabPreviewFrameRoot . style . bottom = null ;
384
+ tabPreviewFrameRoot . style . right = null ;
385
+ } ;
386
+
387
+ hideTabPreviewFramePosition ( ) ;
388
+ resetTabPreviewFramePosition ( ) ;
380
389
381
390
let unmountTabPreviewFrameTimeout ;
382
391
@@ -385,59 +394,58 @@ window.addEventListener('message', (event) => {
385
394
if ( msg === 'COPY_URL' ) {
386
395
copy ( payload . url ) ;
387
396
} else if ( msg === 'PREVIEW_TAB_ON' ) {
388
- const { id , title, url, faviconUrl, tabItemY, isDark } = payload ;
389
- // console.log(id, title, url, faviconUrl, tabItemY,isDark);
397
+ const { title, url, faviconUrl, tabItemY, isDark } = payload ;
398
+ // console.log(title, url, faviconUrl, tabItemY, isDark);
390
399
391
400
if ( unmountTabPreviewFrameTimeout ) {
392
401
clearTimeout ( unmountTabPreviewFrameTimeout ) ;
393
402
}
394
403
395
- ReactDOM . render (
396
- < TabPreviewFrame
397
- id = { id }
398
- title = { title }
399
- url = { url }
400
- faviconUrl = { faviconUrl }
401
- isDark = { isDark }
402
- /> ,
403
- tabPreviewFrameRoot
404
- ) ;
405
- tabPreviewFrameRoot . style . zIndex = '999999999' ;
406
- tabPreviewFrameRoot . style . visibility = 'visible' ;
407
-
408
- const sidebarIframe = sidebarRoot . querySelector ( 'iframe' ) ;
409
- const {
410
- left : iframeLeft ,
411
- width : iframeWidth ,
412
- right : iframeRight ,
413
- } = sidebarIframe . getBoundingClientRect ( ) ;
414
-
415
- let top = tabItemY ;
416
- let previewFrameHeight = tabPreviewFrameRoot
417
- . querySelector ( '.TabPreviewContainer' )
418
- . getBoundingClientRect ( ) . height ;
419
- if ( top + previewFrameHeight >= window . innerHeight ) {
420
- top = window . innerHeight - previewFrameHeight - 5 ;
421
- }
422
-
423
- tabPreviewFrameRoot . style . top = `${ Math . floor ( top ) } px` ;
404
+ try {
405
+ ReactDOM . render (
406
+ < TabPreviewFrame
407
+ title = { title }
408
+ url = { url }
409
+ faviconUrl = { faviconUrl }
410
+ isDark = { isDark }
411
+ /> ,
412
+ tabPreviewFrameRoot
413
+ ) ;
414
+ tabPreviewFrameRoot . style . zIndex = '999999999' ;
415
+ tabPreviewFrameRoot . style . visibility = 'visible' ;
416
+
417
+ const sidebarIframe = sidebarRoot . querySelector ( 'iframe' ) ;
418
+ const {
419
+ left : iframeLeft ,
420
+ width : iframeWidth ,
421
+ right : iframeRight ,
422
+ } = sidebarIframe . getBoundingClientRect ( ) ;
423
+
424
+ let top = tabItemY ;
425
+ let previewFrameHeight = tabPreviewFrameRoot
426
+ . querySelector ( '.TabPreviewContainer' )
427
+ . getBoundingClientRect ( ) . height ;
428
+ if ( top + previewFrameHeight >= window . innerHeight ) {
429
+ top = window . innerHeight - previewFrameHeight - 5 ;
430
+ }
431
+ tabPreviewFrameRoot . style . top = `${ Math . floor ( top ) } px` ;
424
432
425
- const isIframeOnLeft = iframeLeft === 0 ;
426
- if ( isIframeOnLeft ) {
427
- tabPreviewFrameRoot . style . left = `${ Math . floor ( iframeRight ) + 3 } px` ;
428
- } else {
429
- tabPreviewFrameRoot . style . right = `${ Math . floor ( iframeWidth ) + 3 } px` ;
433
+ const isIframeOnLeft = iframeLeft === 0 ;
434
+ if ( isIframeOnLeft ) {
435
+ tabPreviewFrameRoot . style . left = `${ Math . floor ( iframeRight ) + 3 } px` ;
436
+ } else {
437
+ tabPreviewFrameRoot . style . right = `${ Math . floor ( iframeWidth ) + 3 } px` ;
438
+ }
439
+ } catch ( err ) {
440
+ hideTabPreviewFramePosition ( ) ;
441
+ ReactDOM . unmountComponentAtNode ( tabPreviewFrameRoot ) ;
442
+ resetTabPreviewFramePosition ( ) ;
430
443
}
431
444
} else if ( msg === 'PREVIEW_TAB_OFF' ) {
432
- tabPreviewFrameRoot . style . zIndex = '-100' ;
433
- tabPreviewFrameRoot . style . visibility = 'hidden' ;
434
-
445
+ hideTabPreviewFramePosition ( ) ;
435
446
unmountTabPreviewFrameTimeout = setTimeout ( ( ) => {
436
447
ReactDOM . unmountComponentAtNode ( tabPreviewFrameRoot ) ;
437
- tabPreviewFrameRoot . style . top = null ;
438
- tabPreviewFrameRoot . style . left = null ;
439
- tabPreviewFrameRoot . style . bottom = null ;
440
- tabPreviewFrameRoot . style . right = null ;
448
+ resetTabPreviewFramePosition ( ) ;
441
449
} , 500 ) ;
442
450
}
443
451
} ) ;
0 commit comments