我希望下面的问题适用于所有主要浏览器Opera, Internet Explorer, Chrome, Safari和Firefox
我想创建一个应用程序,其中用户必须遵循页面的顺序Text1.php, Text2.php, Text3.php
,以便完全能够创建考试。
问题是,在任何时候用户都可以点击back
或forward
浏览器按钮或通过输入页面url访问另一个页面。
我的问题是:
-
如果用户点击
back
或forward
浏览器按钮,将显示提示框或小窗口提示:创建评估时,您不应该离开此页面,如果如果你想离开这个页面,那么你将被送回"菜单"页面丢掉考试的所有细节。点击下面的链接:
离开评估
如果您想继续创建当前评估,那么请按以下连结:
继续评估 -
如果用户在评估创建页面
Text1.php, Text2.php OR Text3.php
中的任何一个页面上,并且用户试图更改url中的网址以访问另一个页面,则将显示相同的窗口或提示框或以上。
我的问题是,这是可能的,如果框显示时使用url或浏览器按钮,然后能够留在当前页面上,如果用户点击Continue Assessment
或导航到menu.php
,如果用户点击Leave Assessment
链接。有人能提供一个如何实现这一点的例子吗?我需要它能在所有主流浏览器上运行。
谢谢
您可以在会话中设置服务器端cookie (PHP可以很好地处理它),例如,包含仍然可用的页面的数组和包含已经看到的页面的数组。
然后,每次加载页面时(您可以将其放在包含文件中),您的脚本验证(服务器端)最后一个页面用户在评估中,如果用户试图返回,那么您的脚本通知:'您不能返回评估'。
使用JavaScript,您可以在onclick事件之后继续执行之前向用户提供所需的警告。
交易是:-在会话上存储用户标识-附加一个数组与页面状态或与'ponter',表明唯一可能的下一页。因此:当页面1加载时,指针存储'page2'字符串,并且初始验证永远不会让用户再次加载页面1或页面3,等等。-就这些。
英语不好意思。不是美国人。div;)
你最好使用javascripts onbeforeunload
event.
window.onbeforeunload = function() {
}
你可以弹出一个确定和取消按钮的对话框使用-
window.onbeforeunload= 'Your text here';
你不能放置按钮(Leave assignment等),因为浏览器出于安全原因不允许。
onbeforeunload事件在w3标准中没有指定,所以一些标准严格的浏览器不支持它。最著名的例子就是Opera。
最方便的浏览器端解决方案似乎是window.beforeunload
,我建议除了我将要描述的之外使用它。
作为PHP页面正常逻辑的一部分,在用户会话中设置一个标志,表示他们已经看到了当前页面。所以在Page1.php
中你可以设置seen1
,在Page2.php
中你可以设置seen2
等等。
现在是最重要的部分。在每个脚本的顶部,在设置标志或向用户发送任何内容之前,检查会话中的标志是否符合它们应该是什么。因此,例如,在Page1.php
上,您希望没有设置任何标志,在Page2.php
上,您希望设置seen1
,但不设置seen2
或seen3
。
如果标志不匹配,您可以使用标志来确定它们应该在哪个页面上,并将它们重定向到那里,而不是显示该页。如果你愿意,你可以设置一个会话变量来提醒他们已经发生了这种情况(在显示警告后清除它)。
请注意,为了使此工作,您必须发送必要的标头等,以防止浏览器或其他任何东西缓存页面。
为什么不设置一个会话变量
$_SESSION['on-page']="page1.php";
if($_SERVER['PHP_SELF']!="page1.php"){ die('Please go back and finish the previous page.'); ?>
之类的?