TL;DR: Your svg has to be visible for getBBox to be useful
While working with d3 recently, I was trying to calculate the width of some elements using getBBox , except it kept returning a 0-sized rect.
It turned out that the svg was being rendered when its parent <div> was not visible. Calling getBBox when the svg is visible gives the right results.
Apparently webkit used to some have issues with this but was patched a long time ago.
Hope this helps.