打开网站时,ipad 和 iphone 浏览器崩溃
Posted
技术标签:
【中文标题】打开网站时,ipad 和 iphone 浏览器崩溃【英文标题】:ipad and iphone browser crashes when opening site 【发布时间】:2015-01-15 12:30:10 【问题描述】:当您在动画中使用 css 更改字体大小时,似乎 ios(ipad 和 iphone)会崩溃。 任何人都知道这是为什么以及如何解决它? 真的希望有人对此有答案。据我所知,用 css 动画改变字体大小是完全合法的。
老问题:
我遇到了一个疯狂的问题,我只是不知道发生了什么。 我制作了一个简单的网页,它使用 css 动画进行响应。
当有人在 ipad 或 iphone 上尝试加载页面时,他们会收到一个 错误,页面不想加载。在android和windows上 在所有不同的浏览器上都能完美运行。
我完全一无所知。有人有想法吗?
您可以在http://lerenlezen.brokenhip.be/找到该页面
html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Leren Lezen</title>
<link rel="stylesheet" type="text/css" href="style/default.css" />
</style>
</head>
<body>
<header>
<a href="#logopedist" id="opzoek" title="Leren Lezen zoekt een logopediste. Klik Hier!">Ben jij een logopediste?</a>
<h1>Leren Lezen</h1>
<h2>Een acpp voor het eerste leerjaar</h2>
</header>
<article>
<section>
<h3>Een app speciaal ontwikkeld voor kinderen uit het eerste leerjaar.</h3>
<p>Met extra aandacht voor twee- en drieklanken.</p>
<p>Instelbaar zodat de app het specifiek leerplan exact volgt.</p>
<p>Weldra in de Google Store!</p>
</section>
<form action="form_handler.php" method="post">
<label for="email">Blijf op de hoogte:</label>
<input name="email" id="email" type="email" placeholder="email" required />
<input name="kind" type="hidden" value="sub" />
<input name="submit" id="submit" type="submit" value="" />
</form>
</article>
<article id="logopedist">
<section>
<h3>Ben je logopediste en wil je helpen?</h3>
<p>Leren Lezen zoekt een logopediste met perfecte uitspraak en kennis van het leerplan van het eerste leerjaar.</p>
<p>Het zal slechts een tweetal uur van je tijd innemen, maar ondertussen zal je duizende kinderen helpen!</p>
<p>Vul je email adres in en we zullen je zoveel mogelijk details door mailen!</p>
</section>
<form action="form_handler.php" method="post">
<label for="email_logo">Ik ben logopediste en wil helpen!<br />Stuur mij meer details:</label>
<input name="naam_logo" id="naam_logo" type="text" placeholder="Voornaam Achternaam" required />
<input name="email_logo" id="email_logo" type="email" placeholder="email" required />
<input name="kind" type="hidden" value="logo" />
<input name="submit_logo" id="submit_logo" type="submit" value="" />
</form>
</article>
</body>
</html>
如果您删除关键帧处的字体大小,它会加载正常,否则将不会加载。
CSS 代码:
#opzoek
opacity: 0.8;
float: left;
display: block;
width:6em;
height:5em;
border-radius:50%;
font-size:1em;
padding: 2.5em 1em 0.5em 1em;
color:#fff;
text-align:center;
vertical-align: middle;
background:#F65292;
shape-inside: circle();
margin: 0.4em 0 0 0.4em;
position:absolute;
font-weight:bold;
display: absolute;
animation:opzoek 5s 1;
-moz-animation:opzoek 5s 1;
-webkit-animation:opzoek 5s 1;
-o-animation:opzoek 5s 1;
@keyframes opzoek
0% transform: rotate(0deg);left:0px; top: 0;
25% transform: rotate(20deg);left:0px; top: 0;
50% transform: rotate(0deg);left:25%; top: 0;
45% transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.0em;
70% transform: rotate(0deg);left:25%;background:#1ec7e6; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.0em;
80% transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.6em;
100% transform: rotate(-360deg);left:0px; top: 0; width:6em; height:5em; padding: 2.5em 1em 0.5em 1em; font-size:1em;
@-webkit-keyframes opzoek
0% -webkit-transform: rotate(0deg);left:0px; top: 0;
25% -webkit-transform: rotate(20deg);left:0px; top: 0;
50% -webkit-transform: rotate(0deg);left:25%; top: 0;
45% -webkit-transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.0em;
70% -webkit-transform: rotate(0deg);left:25%;background:#1ec7e6; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.0em;
80% -webkit-transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.6em;
100% -webkit-transform: rotate(-360deg);left:0px; top: 0; width:6em; height:5em; padding: 2.5em 1em 0.5em 1em; font-size:1em;
@-moz-keyframes opzoek
0% -moz-transform: rotate(0deg);left:0px; top: 0;
25% -moz-transform: rotate(20deg);left:0px; top: 0;
50% -moz-transform: rotate(0deg);left:25%; top: 0;
55% -moz-transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.0em;
70% -moz-transform: rotate(0deg);left:25%;background:#1ec7e6; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.6em;
80% -moz-transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 9em;
100% -moz-transform: rotate(-360deg);left:0px; top: 0; width:6em; height:5em; padding: 2.5em 1em 0.5em 1em; font-size:1em;
@-o-keyframes opzoek
0% transform: rotate(0deg);left:0px; top: 0;
25% transform: rotate(20deg);left:0px; top: 0;
50% transform: rotate(0deg);left:50%; top: 0;
55% transform: rotate(0deg);left:50%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.0em;
70% transform: rotate(0deg);left:50%;background:#1ec7e6; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.0em;
80% transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em; font-size:1.6em;
100% transform: rotate(-360deg);left:0px; top: 0; width:6em; height:5em; padding: 2.5em 1em 0.5em 1em; font-size:1em;
【问题讨论】:
您需要分享您的一些代码,以帮助重现问题,并供将来在网站上参考此问题。实时页面的链接是不可取的,因为一旦问题得到解决,参考资料就会消失。 对不起。如果我们能找到它,我会添加导致错误的代码。我只是不知道问题出在哪里。所以我添加了完整的页面(html + css)。当我删除 JS 时会发生同样的错误,我认为不需要添加它。希望有人有想法 您应该尝试创建仍然会导致此问题发生的最简单(最短)的程序......这里的社区将简单地忽略带有大量代码转储的问题,因为看起来提问者已经提出没有考虑解决问题。 Stack Overflow reference for Minimal, Complete and Verifiable Examples 我已经考虑解决这个问题,因为我最初认为它与 css 动画有关。所以我首先在动画元素上添加了一个空的 3d 变换来触发 3d 加速,但它失败了,所以之后我删除了所有动画代码。又失败了。删除所有 JS 后,一切仍然失败。最后我再次删除了字体,没有结果。只是错误没有任何意义。这是一个非常简单的小网页。我也没有 ipad 或 iphone 可以测试,所以需要依靠 fb 上的朋友。每次我更改 1 行代码时,我都无法打扰他们。 尝试修复您的validation errors,看看是否能解决您的问题 【参考方案1】:问题似乎在于您的字体大小动画。当然,如果我把你的原始代码放在a JSFiddle 中并在iOS 模拟器中运行,我可以重现崩溃。但是,如果我采用该代码并简单地从 @-webkit-keyframes
关键帧中删除字体大小动画,如下所示:
@-webkit-keyframes opzoek
0% -webkit-transform: rotate(0deg);left:0px; top: 0;
25% -webkit-transform: rotate(20deg);left:0px; top: 0;
50% -webkit-transform: rotate(0deg);left:25%; top: 0;
45% -webkit-transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em;
70% -webkit-transform: rotate(0deg);left:25%;background:#1ec7e6; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em;
80% -webkit-transform: rotate(0deg);left:25%; top: 6em; width: 10em; height: 7em; padding: 4.5em 1em 0.5em 1em;
100% -webkit-transform: rotate(-360deg);left:0px; top: 0; width:6em; height:5em; padding: 2.5em 1em 0.5em 1em;
...我在this JSFiddle 中完成了,然后它不再崩溃,并且动画的其余部分似乎可以工作。
恐怕我对 CSS 关键帧动画了解得不够多,无法知道这是您的代码问题还是移动 Safari 的问题,但这似乎是问题所在。你正在尝试做的事情在我看来足够理智,我可能会将它作为一个错误提出来(我猜是with Apple)。
我的同情。当您自己无法访问移动 Safari 时,调试这样的事情并不容易。使用完整的开发设备来解决它已经够难的了……
如果它可以帮助其他人弄清楚发生了什么,这里是一个最小的复制。此代码在桌面 Safari 上可以正常工作,但会导致移动 Safari 崩溃(至少在 iOS 8.1 中。)
有趣的是,这只是 (a) 旋转和 (b) 在 ems 中指定的 font-size
组合的问题。如果我将字体大小转换更改为使用像素,例如将其动画化为 20px
而不是 1em
,它工作正常,所以可能是 em 计算问题。
#opzoek
-webkit-animation:opzoek 5s 1;
/*
The display: block isn't necessary for bug reproduction;
it just makes the animation actually do something on
non-mobile Safari.
*/
display: block;
@-webkit-keyframes opzoek
0% -webkit-transform: rotate(0deg);
100% -webkit-transform: rotate(-360deg); font-size: 1em;
<a href="" id="opzoek">Words</a>
JSFiddle here if that makes it easier to see the problem.
【讨论】:
编辑了问题。因为我真的很想知道为什么这是一个问题。据我所知这是css的正确用法。 @brokenhip 似乎是合理的。我只是在我的答案中添加了一个最小的复制案例;它可能会帮助人们追踪正在发生的事情。它看起来像旋转和字体大小的组合。有趣的是,看起来如果您以像素而不是 em 为单位指定字体大小,它可以正常工作,因此这可能是您的解决方法。也许在事物被转换时计算 em-size 会变得很困惑。以上是关于打开网站时,ipad 和 iphone 浏览器崩溃的主要内容,如果未能解决你的问题,请参考以下文章
请问电脑PC自带IE浏览器和 苹果IPHONE或者安卓手机打开同一域名网站时,分别显示不同内容,代码如何修改,
根据浏览器内核判断是web/iOS/android/ipad/iphone 来打开不同的网站或页面
iOS 9 Safari webkit 仅在 iPad 上崩溃(iPhone 工作正常)
iPhone 应用程序被拒绝 - 由于 iPad 崩溃,目标设备系列设置为仅 iPhone
当我们执行以下操作时,您的应用程序在运行 iOS 11.1 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃: