I can reproduce this in Chrome on en.wikipedia.org. Though not every time.

Stack trace:

Uncaught TypeError: Cannot use 'in' operator to search for 'scrollTop' in
undefined load.php?…:102
vendorPropName load.php?…:102
jQuery.extend.css load.php?…:105
Tween.propHooks._default.get load.php?…:136
Tween.cur load.php?…:136
Tween.init load.php?…:135
Tween load.php?…:135
Animation.deferred.promise.createTween load.php?…:131
tweeners.* load.php?…:129
(anonymous function) load.php?…:130
jQuery.extend.each load.php?…:8
createTweens load.php?…:130
Animation load.php?…:132
doAnimation load.php?…:137
jQuery.extend.dequeue load.php?…:25
(anonymous function) load.php?…:26
jQuery.extend.each load.php?…:8
jQuery.fn.jQuery.each load.php?…:4
jQuery.fn.extend.queue load.php?…:26
jQuery.fn.extend.animate load.php?…:138
ve.Element.scrollIntoView load.php?ext.visualEditor…:11
ve.Element.scrollElementIntoView load.php?ext.visualEditor…:12
ve.ui.OptionWidget.setSelected load.php?ext.visualEditor…:404
ve.ui.SelectWidget.selectItem load.php?ext.visualEditor…:400
ve.ui.PagedDialog.addPage load.php?ext.visualEditor…:458
ve.ui.MWMetaDialog.initialize load.php?ext.visualEditor…:461
ve.ui.Window.onFrameInitialize load.php?ext.visualEditor…:353
oo.EventEmitter.emit load.php?ext.visualEditor.bas…:133
ve.ui.Frame.load load.php?ext.visualEditor…:351
ve.ui.WindowSet.open load.php?ext.visualEditor…:356
ve.init.mw.ViewPageTarget.onToolbarMwMetaButtonClick
load.php?ext.visualEditor.bas…:87
proxy load.php?…:10
jQuery.event.dispatch load.php?…:45
elemData.handle.eventHandle load.php?…:38

In plain English:
- User clicks Page settings button
- Dialog doesn't exist yet, so we instantiate it and initialise it
- MWMetaDialog.initialize adds the 'categories' section
- SelectWidget sees we don't have a selected panel yet, and now that
  we have > 0 panels, it selects this new one
- OptionWidget is brave and tries to ensure the selected panel is
  visibile attempting to scroll it into view
- ve.Element traverses up from the panel element until it eventually is
  unable to find any element that is scrollable and falls back to
  ve.Element.getWindow( el )
- We hand off this element (= detached iframe's window), to $.fn.animate
  which will try to animate scrollTop to 60px.

Both in our jQuery version (v1.8.3) and the current one in use on jquery.com (v1.9.1) animating scrollTop on either window, document or document.documentElement (<html>) is not supported and results in :


$(window).animate({'scrollTop': 100})
< TypeError: Cannot use 'in' operator to search for 'scrollTop' in undefined

* $.css: There is no window.style, and thus no 'scrollTop' in window.style
* Also, there is no window.scrollTop

$(document).animate({'scrollTop': 100})
< TypeError: Cannot read property 'ownerDocument' of null

* There is no document.scrollTop.

$(document.documentElement).animate({'scrollTop': 100})
> [ <html> ]

* No exception, but scroll unchanged.
* There is a document.documentElement.scrollTop, but it doesn't appear to
  do anything (defaults to 0, setting is a no-op)

 
$(document.body).animate({'scrollTop': 100})
> [ <body> ]

* Works!



.... so, we should fix getClosestScrollableContainer to not fallback to window, because that's not a viable fallback as that is in fact not a scrollable container.