Accessing un-interpolated face normals?

I think the issue you’re having with standard derivatives is that it is only available as an extension in WebGL 1. In GL2 it is always there (so the extension doesn’t exist). That means you have to do do the enabling a little differently:

#ifdef GL_OES_standard_derivatives
    #extension GL_OES_standard_derivatives : enable
    #define standard_derivatives true
#endif

#ifdef GL2
    #define standard_derivatives true
#endif