Javascript Mobile Safari:为什么window.scrollTo(0,0)没有滚动到(0,0)?

Javascript Mobile Safari:为什么window.scrollTo(0,0)没有滚动到(0,0)?,javascript,knockout.js,twitter-bootstrap-3,mobile-safari,sammy.js,Javascript,Knockout.js,Twitter Bootstrap 3,Mobile Safari,Sammy.js,我已经用Bootstrap3、Sammy.js和Knockout 3构建了一个小的单页web应用程序。我发现,当页面向下滚动时,我无法打开窗口。当我同时更改位置时,滚动到(0,0)以使用Mobile Safari。散列——特别是在iPhone 5C上的iOS 7上(可能发生在其他iPhone型号上) 当我尝试这样的事情时: self.changeState = function() { self.state(State.NewState); location.hash = 'so

我已经用Bootstrap3、Sammy.js和Knockout 3构建了一个小的单页web应用程序。我发现,当页面向下滚动时,我无法打开
窗口。当我同时更改
位置时,滚动到(0,0)
以使用Mobile Safari。散列
——特别是在iPhone 5C上的iOS 7上(可能发生在其他iPhone型号上)

当我尝试这样的事情时:

self.changeState = function() {
    self.state(State.NewState);
    location.hash = 'somevalue';
    window.scrollTo(0, 0);
};
页面将几乎一直滚动到顶部-通常滚动到Y=12或13。如果我调用
窗口,它将永远不会滚动到0。滚动到(0,0)当用户滚动到页面底部时(并且内容足够高,可以滚动到顶部)

我尝试过各种答案/建议(例如);通常的补救措施(用
setTimeout
包装)不会改变行为-它仍然会滚动到页面顶部附近的某个位置,但不会完全滚动到顶部

标题样式:

<div class="navbar navbar-default navbar-inverse navbar-static-top">
以及:

我与Safari Web Inspector一起深入研究了这一点,就页面结构而言,似乎没有什么不合适的地方。我只是不知道在这里找什么-有什么想法吗

编辑:


到目前为止,我还不能在我的应用程序代码之外复制这个。我试图让它在JSFIDLE中得到突破——在这一个中,它工作正常(例如,它会滚动到0,0,正如它应该的那样):

在我的例子中,同样的问题,但它来自于我在iframe中的事实。
这么做window.top.scrollTo(0,0)成功了

我通过在元素上使用
height:100vh
minheight:100vh
重新创建了这个问题。我将CSS改为使用
100%
(这有点麻烦),问题消失了。

尝试将scrollTo设置为(-n,0);“n”是小于0的任何数字

<meta name="viewport" 
      content="width=device-width, 
               height=device-height, 
               initial-scale=1.0, 
               maximum-scale=1.0, 
               target-densityDpi=device-dpi" />
self.changeState = function() {
    self.state(State.NewState);
    location.hash = 'somevalue';
    window.scrollTo(0, 0);
};
self.changeState = function() {
    self.state(State.NewState);
    location.hash = 'somevalue';
    window.setTimeout(function() {
        window.scrollTo(0, 0);
    }, 0);
};