iPhone Safari浏览器更改#哈希URL后,Javascript警告消息框停止工作。

25
我在iPhone Safari上运行一个网页。该页面有一个按钮。点击它会显示一个警告消息框。这是可以的。然后,我通过在地址栏中输入来更改或添加 # 哈希URL,然后警告消息框停止工作。我单击按钮,什么也不发生。没有JavaScript错误,但也没有警告消息框。

video recording of the issue

这是iOS Safari已知问题吗?

请分享您的想法和解决方案。非常感谢!

$(".button").click(function () {
  alert('Hello');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<input class="button" type="button" value="alert" />

注意

  • 这并不完全是因为我的代码。我也已经在这里进行了测试。
  • 我已经测试过最新的iOS版本。
  • Javascript本身是可以工作的。
  • 这不是jQuery的问题,纯JS代码也无法工作。
  • 在iPhone Chrome或其他浏览器中警告框可以工作。

1
@deceze 请尝试连续两次不重新加载。第一次尝试是可以的。第二次尝试(更改#部分),将无法成功。 - Pyae Phyo Aung
2
我可以在iPad上按照描述复制此问题。单独的#有效,#hash有效,但有斜杠的#/hash无效。 - Lee Kowalkowski
2
在Safari Mobile中,如果你在URL后面添加任何内容并点击“前往”,页面实际上不会重新加载;相反,Safari会尝试定位网页中的片段,我认为这是导致警报无法正常工作的原因。但是,即使带有“#”,如果您手动重新加载页面,警报也可以正常工作。 - Sarath Damaraju
1
@PyaePhyoAung,不重新加载页面是正常的,但防止警报等功能应被视为错误,除非Safari开发团队在某处指定。 - Sarath Damaraju
看起来问题出在 alert 方法本身。我发现它是在记录时间轴时通过 onclick 调用的,但它并没有显示任何内容。作为一个可能的临时解决方案 - 在 URL 哈希更改时重新加载页面 - 警报将在下一次哈希更改之前起作用。 - extempl
显示剩余10条评论
4个回答

2

0

除了作为锚点的引用之外,我从未在URL中使用过#,但我对此并不100%确定...... 我认为在URL中添加#并按回车键不会重新加载页面。 URL中的#abc确实告诉浏览器跳转到名为abc的锚点,因此这将永远不会重新加载页面或触发某些JavaScript。 如果您不想跳转/滚动到实际页面内的某个锚点,请勿在URL中使用#。 这应该解决您的问题。


0

这可能是因为您没有发出另一个http请求,而是指示浏览器转到该哈希(例如)#abc。

如果您有一个具有该ID的元素,它将跳转到页面的该部分。

例如:

<a href="#abc">click to jump down to my section</a>

<p id="abc">my section</p>

我假设当你在URL中键入#abc时,它会寻找那个。当然,那里没有。

除此之外,我并不完全确定。


我相信在任何浏览器中更改或按下地址栏中的回车键都会发出新的请求。这个规则只适用于锚点。 - DerpyNerd

0

#在URL中是片段标识符。它期望在URL之后有某些内容,例如:www.yourpage.com/foo.html#bar。这使其在页面中寻找bar片段。页面将不会重新加载。

这可能有助于w3片段


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接