iOS has a somewhat heavy-handed implementation of user permissions for camera access in the Safari browser. The permissions are not persistent, and re-requested with every page load.
If you have a single-page app, you should expect to grant camera access once per application load.
However, if you're loading the page each time you need to scan, you will see the camera permission dialog. Whenever possible, we recommend implementing your workflow without reloading the page.
Permissions are persistent on OSX and Chrome on Android, and are asked with every camera load on Firefox.