I'd suggest changing:
self.getRowsHeight(rows) && self.update(rows);
To account for cases where row height hasn't changed but scroll position has (e.g. re-positioned manually by setting el.scrollTop).
Or at least an override argument could be passed in to disable the default short-circuit behavior.
I don't get your idea
If row height hasn't been changed then there are no reason to call .reshesh.
If you need to set el.scrollTop manually, just do it, you don't need call .refresh in this case.
At the end of the day it turns out to be more of a browser compatibility issue than anything. Again - I don't think it unreasonable to include [at minimum] an argument to bypass the short-circuit behavior in the refresh function, therefore allowing a user to actually force a full refresh - regardless of internal state - when desired.
Here's an example which demonstrates the issue in the latest Firefox release (tested on Windows 7):
Added parameter to .refresh function to force update processing. Closes
Here you are @adamhammouda
Calling .refresh(true) should do the trick