Skip to content

Go back one page freezes the WASM runtime #10328

Open

Description

@carrascomj

Bevy version

0.11.3

Relevant system information

Running WASM on firefox on WASM: wasm-bindgen v0.2.87, web-sys v0.3.64. Chromium also reproduces this issue.

What went wrong

Clicking on a link and then "Go back one page" in the browser returns to a frozen bevy app on WASM.

This does not happen with, for instance, egui, so I think it is not an upstream wasm-bindgen bug (?).

The issue can be reproduced:

  1. Go to https://bevyengine.org/examples/2D%20Rendering/2d-gizmos/
  2. The shapes should move.
  3. Click on the "here" link.
  4. Press "Go back one page" in your browser (left arrow, I am using the firefox term).
  5. The app is frozen.

Workaround

I am making my links open in a new tab but the workaround is not desirable since I have to implement a specialized Hyperlink struct for egui which is a lot of boilerplate for a link :(.

Activity

  1. added
    C-BugAn unexpected or incorrect behavior
    S-Needs-TriageThis issue needs to be labelled
    on Oct 31, 2023
  2. mockersf commented on Oct 31, 2023

    @mockersf
    Member

    This is due to a browser feature called "bfcache": https://web.dev/articles/bfcache

    When going back, the browser is not actually reloading the previous page but reuse directly an in memory cache of the page with "frozen" javascript callback / promises.

    This is not supported by Bevy, I'll try to look into what can be done (short task list: check js events are forwarded by winit, and try to react to them in Bevy, maybe like for Android suspend / resume. help is welcome!).

    In the meantime, you can set js event listeners on your page destroying the canvas and recreating it when the page is reloaded from the bfcache, it should restart Bevy

  3. added
    O-WebSpecific to web (WASM) builds
    and removed
    S-Needs-TriageThis issue needs to be labelled
    on Oct 31, 2023
  4. carrascomj commented on Oct 31, 2023

    @carrascomj
    Author

    Thanks for the useful pointers and the link! I'll study the event listeners route.

  5. added a commit that references this issue on Oct 31, 2023
  6. daxpedda commented on Nov 1, 2023

    @daxpedda
    Contributor

    This was addressed by Winit in rust-windowing/winit#2851 and rust-windowing/winit#2912 and should just work for Bevy after #8745. Correct handling of the Suspended/Resumed events required of course.
    Let me know if there are any remaining issues though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-BugAn unexpected or incorrect behaviorO-WebSpecific to web (WASM) builds

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions