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

Rob*_*Rob 5 javascript mobile-safari sammy.js knockout.js twitter-bootstrap-3

我已经使用 Bootstrap 3、Sammy.js 和 Knockout 3 构建了一个小型单页 Web 应用程序。我发现当页面向下滚动时,window.scrollTo(0, 0)当我也更改时,我无法在 Mobile Safari 上工作location.hash-特别是在 iPhone 5C 上的 iOS 7 上(尽管可能会发生在其他 iPhone 型号上)。

当我尝试这样的事情时:

self.changeState = function() {
    self.state(State.NewState);
    location.hash = 'somevalue';
    window.scrollTo(0, 0);
};
Run Code Online (Sandbox Code Playgroud)

页面将几乎一直滚动到顶部 - 它通常会滚动到 Y = 12 或 13。如果我window.scrollTo(0, 0);在用户滚动到页面底部时调用它,它永远不会滚动到 0 (并且内容足够高以保证滚动到顶部)。

我已经尝试了各种 StackOverflow 答案/建议(例如,同样的老问题,.scrollTop(0) 在 Chrome 和 Safari 中不起作用);通常的补救措施(包裹在 a 中setTimeout)不会改变行为 - 它仍然滚动到页面顶部附近的某个地方,但不是完全到顶部。

标题样式:

<div class="navbar navbar-default navbar-inverse navbar-static-top">
Run Code Online (Sandbox Code Playgroud)

视口设置:

<meta name="viewport" 
      content="width=device-width, 
               height=device-height, 
               initial-scale=1.0, 
               maximum-scale=1.0, 
               target-densityDpi=device-dpi" />
Run Code Online (Sandbox Code Playgroud)

滚动尝试:

self.changeState = function() {
    self.state(State.NewState);
    location.hash = 'somevalue';
    window.scrollTo(0, 0);
};
Run Code Online (Sandbox Code Playgroud)

和:

self.changeState = function() {
    self.state(State.NewState);
    location.hash = 'somevalue';
    window.setTimeout(function() {
        window.scrollTo(0, 0);
    }, 0);
};
Run Code Online (Sandbox Code Playgroud)

我已经使用 Safari Web Inspector 对此进行了深入研究,就页面结构而言,似乎没有任何不合适的地方。我只是不确定要在这里寻找什么 - 有什么想法吗?

编辑:

到目前为止,我还没有能够在我的应用程序代码之外重现这一点。我试图让它在 JSFiddle 中中断 - 在这个中,它工作正常(例如,它应该滚动到 0,0):http : //jsfiddle.net/rringham/n9evU/24/show

小智 0

就我而言,同样的问题,但它来自于我位于 iframe 中的事实。所以执行 window.top.scrollTo(0,0) 就成功了!!!!