iOS has a somewhat heavy-handed implementation of user permissions for camera access in the Safari browser. The permissions are not persisted, and re-requested with every page load.
If you have a single page app, you should expect to grand 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 persisted on OSX and Chrome on Android, and are asked with every camera load on Firefox.