我有一个网格,其中有一个到下一页的链接,并且我有一个按钮可以从当前页面导航回网格。到目前为止,我一直在使用这种方法向后导航,即
<INPUT TYPE="BUTTON" VALUE="Back to Datagrid" onClick="history.go(-1);">
但是当我遇到其他一些限制时,我在导航时遇到了一些问题,所以我发现了类似的内容:
$exit = $ENV{'HTTP_REFERER'};
<INPUT TYPE="BUTTON" VALUE="Back to Datagrid" onClick="$exit">
但是它不起作用。我不知道为什么,这两种方法有什么区别?
最佳答案
第一种方法尝试复制后退按钮的功能。
第二种方法采用浏览器声明的上一页的 URI,将其放入页面中而不对其进行清理,并尝试运行该 URI,就好像它是 JavaScript 一样。这会立即出错,因为 URI 很少是有效的 JavaScript。
更好的方法是计算出您想要访问的 URI(大概基于您用于构建当前页面的数据)并创建一个正常的前向链接( <a href...
)到它......并且如果用户想返回,请让他们使用浏览器中内置的后退按钮。这种方法:
- 如果 JS 不可用,也不会失败
- 如果浏览器不发送可选的 HTTP header ,则不会失败
- 不会让用户的浏览器历史记录以意想不到的方式运行,从而使用户感到困惑
我不确定,但我怀疑有人可能会制作一个 URI 并将其链接到您的页面,包括 "<script>...
在里面。然后,用户可以单击该链接,获取插入到该页面中的页面的 URI,并向您介绍 XSS 攻击。 (我认为这应该会失败,因为其中一些字符应该是 URI 编码的,但我不想冒这个风险 - 每当您有来自系统外部并返回到页面的数据时,请始终放入针对 XSS 的标准保护措施)
关于javascript - 如何在 Perl CGI 程序中链接到上一个网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869822/