代码之家  ›  专栏  ›  技术社区  ›  Marco Demaio

通过先重新加载页面,然后再次滚动页面,使浏览器返回

  •  0
  • Marco Demaio  · 技术社区  · 15 年前

    我有一个 file_list.php ,每个文件旁边都有一个删除它的按钮。当用户按下靠近某个文件名的删除按钮时,浏览器将转到一个名为 delete_file.php 它删除文件,然后告诉浏览器返回 文件\u list.php

    删除\u file.php header("Location: file_list.php”);

    当浏览器返回到 文件\u list.php . 假设用户滚动文件列表并删除了最后一个文件,这时浏览器再次显示页面 文件\u list.php 它不会再滚动到页面底部。



    我想出的解决办法是:

    基本上,我找到了一个奇怪的方法来解决这个问题 而不是使用 header(“Location:file\u list.php”); 在里面 删除\u file.php window.history.go(-1) .

    此解决方法在以下情况下非常有效: (仅使用PHP) session_start 浏览器重新加载文件\u list.php页面,然后将其滚动回原来的位置。 但如果用户不在会话中,浏览器会滚动页面,但之前不会重新加载,因此用户仍会在文件列表中看到他删除的文件。



    问题

    1. 你知道解决这个问题的方法吗,甚至是解决这个问题的另一种方法?

    谢谢!

    我知道我可以使用AJAX来删除这个文件,这样我就不必每次都去删除\u file.php,但这不是答案 .

    4 回复  |  直到 15 年前
        1
  •  5
  •   egrunin    15 年前

    可以发射锚点:

    <a name="anchor1"/>filename_this
    <a name="anchor2"/>filename_that
    

    删除 filename_this anchor1 . 删除页面然后重定向到 file_list.php#anchor1

        2
  •  3
  •   Seth    15 年前

    浏览器一般都记得你在哪里。如果你从A页转到B页,然后返回(用后退按钮),你应该到达A页的同一个地方。

    当你使用 header('location: A.php'); ,您正在指示浏览器

    当你使用 history.go(-1) ,您指示浏览器单击“上一步”按钮,这就是您的解决方法工作的原因。你很可能会发出 no-cache 标题,这就是浏览器重新加载页面的原因。这里的效果与重新加载页面(不导航)相同。这样做的问题是,用户可以单击“前进”按钮,到达您的位置 delete_file.php 再次(可能会意外删除另一个文件)。

    一些想法:

    • 您可以在页面上放置一组锚定(每个文件一个),并重定向到最接近用户单击位置的锚定。因此,如果删除了文件4,则重定向到文件3 header('file_list.php#file3'); .
    • 在javascript中计算当前滚动位置,并将其存储在cookie中。重新加载页面时,请使用javascript滚动到您所在的位置(请确保只执行一次,3天后再访问页面并滚动到中间位置会让人感到困惑)。
    • 您还可以使用AJAX在后台删除文件。在这里,您可以让浏览器处理滚动。这也许不是你想要的答案,但它确实是一个解决方案。

    在我看来,最好的解决办法是最简单的:把你的页面缩短。如果您的页面不够长,无法滚动,那么就没有问题。

        3
  •  0
  •   elcuco    15 年前

        4
  •  0
  •   bob-the-destroyer    15 年前

    总之,你的步骤是:

    2) “delete\u file.php删除文件,然后它告诉浏览器返回文件\u list.php”

    我假设文件\u list.php只显示目录的当前内容,这显然不包括刚刚删除的文件。但是您希望file_list.php以某种方式向用户提示有关他们刚刚删除的文件的某些信息,例如,如果文件仍然存在,则跳回该文件通常位于列表中的位置。可能有几十种方法可以做到这一点。

    2) 使用ajax。

    3) 为所有文件系统操作创建一个单独的php库文件。文件\ u list.php是您的客户机需要查看的唯一页面。删除时,文件#list.php会将“#deleted”附加到url中,将目录内容收集到一个数组中, 然后 回显它旁边的“已删除”html锚。在页面打开时,客户端将自动跳转到“已删除”锚点。

    …等等。。。

    推荐文章