@@ -148,7 +148,7 @@ export const LoopVideo = ({
148148 const [ isAutoplayAllowed , setIsAutoplayAllowed ] = useState < boolean | null > (
149149 null ,
150150 ) ;
151- const [ isRestoredFromBFCache , setIsRestoredFromBFCache ] = useState ( false ) ;
151+ const [ hasPageBecomeActive , setHasPageBecomeActive ] = useState ( false ) ;
152152
153153 /**
154154 * Keep a track of whether the video has been in view. We only
@@ -278,6 +278,25 @@ export const LoopVideo = ({
278278 setIsMuted ( true ) ;
279279 } ;
280280
281+ /**
282+ * Handle the case where the page is restored from the cache.
283+ */
284+ const handleRestoreFromCache = ( event : PageTransitionEvent ) => {
285+ if ( event . persisted ) {
286+ setIsAutoplayAllowed ( doesUserPermitAutoplay ( ) ) ;
287+ setHasPageBecomeActive ( true ) ;
288+ } else {
289+ setHasPageBecomeActive ( false ) ;
290+ }
291+ } ;
292+
293+ /**
294+ * Handle the case where the user navigates back to the page.
295+ */
296+ const handlePageBecomesVisible = ( ) => {
297+ setHasPageBecomeActive ( true ) ;
298+ } ;
299+
281300 document . addEventListener (
282301 customLoopPlayAudioEventName ,
283302 handleCustomPlayAudioEvent ,
@@ -286,6 +305,14 @@ export const LoopVideo = ({
286305 customYoutubePlayEventName ,
287306 handleCustomPlayYoutubeEvent ,
288307 ) ;
308+ window . addEventListener ( 'pageshow' , function ( event ) {
309+ handleRestoreFromCache ( event ) ;
310+ } ) ;
311+ document . addEventListener ( 'visibilitychange' , ( ) => {
312+ if ( document . visibilityState === 'visible' ) {
313+ handlePageBecomesVisible ( ) ;
314+ }
315+ } ) ;
289316
290317 return ( ) => {
291318 document . removeEventListener (
@@ -296,6 +323,12 @@ export const LoopVideo = ({
296323 customYoutubePlayEventName ,
297324 handleCustomPlayYoutubeEvent ,
298325 ) ;
326+ window . removeEventListener ( 'pageshow' , function ( event ) {
327+ handleRestoreFromCache ( event ) ;
328+ } ) ;
329+ document . removeEventListener ( 'visibilitychange' , ( ) => {
330+ handlePageBecomesVisible ( ) ;
331+ } ) ;
299332 } ;
300333 } , [ uniqueId ] ) ;
301334
@@ -350,6 +383,10 @@ export const LoopVideo = ({
350383 * Handle play/pause, when instigated by the browser.
351384 */
352385 useEffect ( ( ) => {
386+ console . log ( 'isPlayable' , isPlayable ) ;
387+ console . log ( 'playerState' , playerState ) ;
388+ console . log ( 'isAutoplayAllowed' , isAutoplayAllowed ) ;
389+
353390 if ( ! vidRef . current || ! isPlayable ) {
354391 return ;
355392 }
@@ -373,7 +410,7 @@ export const LoopVideo = ({
373410 isInView &&
374411 ( playerState === 'NOT_STARTED' ||
375412 playerState === 'PAUSED_BY_INTERSECTION_OBSERVER' ||
376- ( isRestoredFromBFCache && playerState === 'PAUSED_BY_BROWSER' ) )
413+ ( hasPageBecomeActive && playerState === 'PAUSED_BY_BROWSER' ) )
377414 ) {
378415 /**
379416 * Check if the video has not been in view before tracking the play.
@@ -383,7 +420,7 @@ export const LoopVideo = ({
383420 ophanTrackerWeb ( atomId , 'loop' ) ( 'play' ) ;
384421 }
385422
386- setIsRestoredFromBFCache ( false ) ;
423+ setHasPageBecomeActive ( false ) ;
387424 void playVideo ( ) ;
388425 }
389426 } , [
@@ -393,7 +430,7 @@ export const LoopVideo = ({
393430 playerState ,
394431 playVideo ,
395432 hasBeenInView ,
396- isRestoredFromBFCache ,
433+ hasPageBecomeActive ,
397434 atomId ,
398435 ] ) ;
399436
@@ -435,30 +472,6 @@ export const LoopVideo = ({
435472 setPreloadPartialData ( isAutoplayAllowed === false || ! ! isInView ) ;
436473 } , [ isAutoplayAllowed , isInView ] ) ;
437474
438- /**
439- * Handle the case where the user navigates back to the page.
440- */
441- useEffect ( ( ) => {
442- const handleRestoreFromCache = ( event : PageTransitionEvent ) => {
443- if ( event . persisted ) {
444- setIsAutoplayAllowed ( doesUserPermitAutoplay ( ) ) ;
445- setIsRestoredFromBFCache ( true ) ;
446- } else {
447- setIsRestoredFromBFCache ( false ) ;
448- }
449- } ;
450-
451- window . addEventListener ( 'pageshow' , function ( event ) {
452- handleRestoreFromCache ( event ) ;
453- } ) ;
454-
455- return ( ) => {
456- window . removeEventListener ( 'pageshow' , function ( event ) {
457- handleRestoreFromCache ( event ) ;
458- } ) ;
459- } ;
460- } , [ ] ) ;
461-
462475 if ( renderingTarget !== 'Web' ) return null ;
463476
464477 if ( adapted ) {
0 commit comments