Couldn't sleep so had another look and I may have solved my issue. Not sure how other people have implemented this sort of thing but this seems to work so far. Posting in case it's useful to anyone else and also in case there's something terribly wrong with this methodology so I can be corrected!
On start of layout--------------------Set HorizScale to floor(browser.ScreenWidth/480)
----------------------------------------------Set VertScale to floor(browser.ScreenHeight/320)
----------------------------------------------Set canvas size to browser.ScreenWidth x browser.ScreenHeight
||||---------HorizScale < VertScale-----Set layout scale to HorizScale
||||---------Else-------------------------------Set layout scale to VertScale
||||----------------------------------------------Scroll to (342,192)
So what this does is at the start of layout it determines the scale of the device's horizontal and vertical resolution relative to the safe zone resolution (in this case 480 x 320) rounded down. It then sets the canvas size to the device's resolution so the game fills the screen. It then determines which scale factor is smaller and scales the layout to that one. Finally it scrolls to the centre of the layout (in this case 342,192 as the layout is 684 x 384).
This seems to work provided 'Fullscreen in browser' in Project Properties is set to anything other than 'Off'. I'm not sure whether there's a particular choice other than that which is best...