0

我在 safari 中发生了一些奇怪的行为,我使用 jQuery.GridLayout 插件和 css 进行样式设置。

仅在某些情况下,此网站布局是一个简单的标题,后面是内容,这些内容是由 javascript 定位的块集合(每个块是一个 div),并且每次调整窗口大小时都会重新排列。

当我将 safari 引导到网站 url 时,所有块在一定程度上重叠(如 50%),但是当我重新调整窗口大小时,如果它们必须移动,则会自动全部转到正确的位置,并且只有在我刷新页面时才会中断。

因此,加载页面似乎把它搞砸了,要么是因为注册失败,要么是因为在我重新调整窗口大小之前没有发生任何事情。

有人在 Safari 中经历过这种行为吗?

它在 firefox 和 opera 中完美运行,它是一个有效的 html 4.01 过渡页面,并且 css 也经过验证(即 wc3 明智)。

我知道发布代码对于解决这类问题非常宝贵,但这是一个生产项目,我有义务不这样做。

无论哪种方式,我都很欣赏关于开始寻找的任何建议?

如何在 Safari 中调试此问题?

谢谢你。

4

3 回答 3

2

Safari 在加载链接资源之前触发 DomReady。这种关于计算 CSS 中定义的元素大小的竞争条件通常可以通过在任何 JavaScript 之前加载你的 CSS 资源来避免(例如:确保标签出现在 ANY 之前的标签中(这是阻塞的,但是给 CSS 进行更改以异步加载). 更糟糕的情况,将块移动到 中的最后一个元素,将标签留在上面。

还建议使用 CSS 连接多个文件(如果有的话)。

于 2009-09-08T15:44:58.867 回答
1

如果您无法为我们发布页面的实际代码,您可能会在尝试在没有特定内容的情况下重现问题时找到解决方案。过去,我在尝试生成一个显示问题的页面以在 IRC/SO 上发布时解决了我自己的一些问题。如果您能够在没有内容的情况下重现问题,请将其发布到社区,这样会更容易找到答案。

我的猜测导致:

  • 您可能会发现您的内容块之一导致了问题。
  • 您可能会发现您正在使用的其他库导致了该问题。
  • 您的布局的一些 javascript 代码可能在一切准备就绪/填充之前运行。根据我的记忆,Safari 可以在加载图像之前快速显示页面。
  • 也许您需要指定某些网格容器的确切宽度/高度。
于 2009-09-08T09:43:33.180 回答
0

小更新:

(底部有新的更新)

http://www.howtocreate.co.uk/safaribenchmarks.html

还有一个工作是这个小脚本:

<script language="JavaScript"> 
 // CREDITS: 
 // Automatic Page Refresher by  Peter Gehrig and Urs Dudli www.24fun.com 
 // Permission given to use the script provided that this notice remains as is. 
  // Additional scripts can be found at http:
  //www.hypergurl.com 
 // Configure refresh interval (in seconds) 
 var refreshinterval=20 
 // Shall the coundown be displayed inside your status bar? Say "yes" or "no" below:
 var displaycountdown="yes" 
 // Do not edit the code below 
 var starttime 
 var nowtime 
 var reloadseconds=0 
 var secondssinceloaded=0 
 function starttime() { starttime=new Date() starttime=starttime.getTime() countdown() 
 } function countdown() { nowtime= new Date() nowtime=nowtime.getTime()      secondssinceloaded=(nowtime-starttime)/1000 
 reloadseconds=Math.round(refreshinterval-secondssinceloaded) if      (refreshinterval>=secondssinceloaded) 
  { var timer=setTimeout("countdown()",1000) if (displaycountdown=="yes") 
  { window.status="Page refreshing in "+reloadseconds+ " seconds" 
  } } else { clearTimeout(timer) window.location.reload(true) } }            window.onload=starttime 
 </script>

我发现刷新脚本解决了 safari 中的问题很奇怪,但是如果我手动刷新页面,页面就会遭到破坏......

########UPDATE##########

好吧,我终于有更多的时间来处理这个问题,在阅读了一些内容之后,我想到了一个相当明显的事情,让内容加载然后格式化,所以现在我所有的 js 都位于</body>and之间</html>

它并不完美,因为现在您无需在页面首次加载时正确放置即可瞥见内容。

在加载几毫秒后,可能会尝试再次调用 js。

我知道这是在线程上提出的,我只是需要时间弄脏我的手,谢谢大家,我会继续更新,直到我以更合适的方式解决它:)

于 2009-09-22T09:41:36.820 回答