Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Safari中使用javascript history.back()失败。。如何使其跨浏览器?_Php_Javascript - Fatal编程技术网

Php 在Safari中使用javascript history.back()失败。。如何使其跨浏览器?

Php 在Safari中使用javascript history.back()失败。。如何使其跨浏览器?,php,javascript,Php,Javascript,我正在使用 <a href="index.php" onclick="history.back();return false;">Back</a> 提供返回上一页链接。它在Windows(IE/Mozilla)上运行良好,但在Safari中在Windows/Mac上都失败 是否有办法使其在所有系统/浏览器(跨浏览器/平台)上工作 如果不可能,有没有其他方法使用PHP等?应该是history.go(-1);返回false 或 history.go(-1);event.

我正在使用

<a href="index.php" onclick="history.back();return false;">Back</a>

提供返回上一页链接。它在Windows(IE/Mozilla)上运行良好,但在Safari中在Windows/Mac上都失败

是否有办法使其在所有系统/浏览器(跨浏览器/平台)上工作


如果不可能,有没有其他方法使用PHP等?

应该是
history.go(-1);返回false
history.go(-1);event.preventDefault() 

你应该考虑这样做:

<a href="javascript:history.go(-1)">Back</a>

试试这个。它应该可以跨IE、FF、Safari和Chrome工作

<a href="#" onclick="if(document.referrer) {window.open(document.referrer,'_self');} else {history.go(-1);} return false;">Cancel<a>
取消

我在为一位客户建立的电子商务网站上遇到了类似的问题。我最初的路线是:

window.history.back();
当按钮被点击时。我遇到了与交叉兼容性问题相同的问题

回答你的问题

如果这是不可能的,有没有其他方法使用PHP等

我的意见是,您不应该调用服务器上的方法来执行客户端操作。这对你的应用程序来说是不必要的开销,在我看来,这是糟糕的设计/实现

现在回答你的主要问题:

是否有办法使其在所有系统/浏览器(跨浏览器/平台)上工作

为了解决这个问题,我在另一篇StackOverflow文章中发现了一个由Mozilla()生成的客户端cookie库(我向作者道歉,我没有你文章的链接)

当用户导航到我的应用程序中我希望他们能够返回的部分时,我使用库创建了一个带有“back url”键的cookie:

$('#id-of-button-clicked').click(function() {
    docCookies.setItem("back-url", window.location.href, ".myDomain.com", "/");
});
此代码使用键值对“back url”和当前url设置cookie,并使其可以从myDomain.com的根目录访问

接下来,在我希望用户能够导航回cookie中设置的URL的页面上,我调用以下代码:

$(‘#id-of-back-button’).click(function() {
    window.location.href = docCookies.getItem('back-url');
});
此代码通过获取“back url”的值来设置窗口位置

免责声明:我不是专业的js开发人员——只是想从我学到的一些经验教训中拿出我的两分钱

对这一答案的挑战:

  • 这个答案使用cookies,很多人不喜欢使用cookies。我的客户要求允许我使用cookies
  • 我没有加密cookie——有些人可能会考虑这个坏习惯。我仍处于开发的早期实施阶段。但是,我将对cookie的访问限制为仅在我们的域内
如果有人仍在解决此问题,请尝试从要使用window.history.back()的链接中删除href-属性。我不确定此解决方案是否符合HTML标准,但对我来说效果很好。

下面的代码正在运行


链接应该是向前的。这会让一些人感到困惑,他们不希望它触发他们的浏览器历史记录,然后使用他们真正的后退按钮。其他人会感到困惑,因为他们希望它会将他们带到逻辑上位于当前页面之前的页面(而不是,例如,他们来自的搜索引擎页面)。其他人不会启用JS,并且会感到困惑,因为index.php没有“返回”。浏览器内置了后退按钮。让用户使用他们知道的功能。不要试图重新发明轮子!你会得到方轮@大卫,谢谢你提供的所有信息。我知道大多数最佳实践。。但需要就是需要。在这里,我问了这个问题的解决方案,不希望用户使用浏览器后退按钮。。此外,我还没有提到我在这里使用“后退”按钮的上下文。。所以不要以为我在试图发明/重新发明一些东西。你必须原谅我们,但我们已经遇到了100名开发人员,他们因为可怕的误导管理者驱动的原因而想要一个脚本化的备份操作,这将使他们的应用程序变得更糟,而且还没有一个脚本化的应用程序。如果还没有看到这个有用的应用程序,我将参加比赛。构建快速HTML原型,用于测试无法利用浏览器后退按钮的iOS/Android本机应用程序。如果您没有编写bookmarklet安装程序,则不应在网页中使用javascript伪URI。仅供参考,使用referer返回将不会维护表单数据,而是打开一个新页面。我正在使用的是
onclick=“javascript:history.go(-1)”
,它现在在iOS 8.1.2 SafariNote中工作。注意,如果要将其附加到
a
标记上的事件处理程序,请确保在返回之前使用
event.preventDefault()
,或者这在Safari中仍然不起作用。
history.back()
现在可以工作了,但是@JoshLeitzel的评论是正确的-您需要调用
event.preventDefault()