Не уверен, что на этот вопрос был дан полный ответ.
У меня была та же проблема, попытка всех решений, описанных выше, не решила ее.Я обнаружил, что при обновлении innerHTML на самом деле полоса прокрутки исчезала на очень короткий промежуток времени (поскольку вся страница становится намного меньше по высоте при обновлении контента), впоследствии, когда снова появляется контент (и полоса прокрутки), браузернет способа узнать, где он находился до вызова, и, следовательно, прокручивать все вверх.
Мое собственное решение было очень простым и не предполагает перехват событий и т. д., я добавил столбец, который я заполнилspacer.gif высота div я собираюсь обновить.Таким образом, сам макет страницы фактически никогда не искажается, полоса прокрутки никогда не исчезает даже на короткий промежуток времени.
<table width="30%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>
<img src="/images/spacer.gif" width="0" height="170"/> <-- adding the extra column to keep the height always the same.
</td>
<td>
<div id="content">
<script>loadnewusermenu()</script> <-- content getting refreshed
</div>
</td>
</tr>
</table>
Надеюсь, это имеет смысл.DjYoy