Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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
Javascript 如果存在div,则禁用对url的访问_Javascript_Php_Jquery_Url_Conditional Statements - Fatal编程技术网

Javascript 如果存在div,则禁用对url的访问

Javascript 如果存在div,则禁用对url的访问,javascript,php,jquery,url,conditional-statements,Javascript,Php,Jquery,Url,Conditional Statements,我有一个倒计时插件安装在我的wordpress网站内,我想禁用对特定URL的访问,直到倒计时结束 此时,通过检查div是否有特定的类,我知道倒计时计时器何时结束 以下是我使用jquery进行检查的方式: jQuery( document ).ready(function() { jQuery.fn.exists = function(){return this.length>0;} if ( jQuery(".hasCountdown").exists()) { // do someth

我有一个倒计时插件安装在我的wordpress网站内,我想禁用对特定URL的访问,直到倒计时结束

此时,通过检查div是否有特定的类,我知道倒计时计时器何时结束

以下是我使用jquery进行检查的方式:

jQuery( document ).ready(function() {
jQuery.fn.exists = function(){return this.length>0;}

if ( jQuery(".hasCountdown").exists()) {
// do something
}
});
但是如果用户禁用javascript,这就不再好了

所以我需要用php来实现这一点

L.E:我正在使用WORDPRESS,我会有更多带有倒计时的页面。 欢迎提出任何建议。 谢谢

您可以使用php返回一个“打开javascript”,然后在加载页面时用javascript替换为冷却块

所以,如果用户在没有js的情况下加载页面,他将看到“打开javascript”


如果启用了javascript,则此文本将在需要时替换为冷却块和url。

您永远不应该依靠javascript阻止用户做任何他们不允许做的事情。用户可以通过多种方式规避JS,任何限制都无法强制执行

我建议您在服务器端执行重要检查。在这种情况下,我建议采用以下流程:

  • 在页面加载时,在会话中设置未来的时间戳(链接开始工作的时间)
  • 向HTML添加常规链接
  • 单击链接时,向服务器端脚本发出AJAX调用,以检查是否已到达时间戳
  • 如果尚未到达,则向客户端发送响应,告知JS停止(即,不要做任何事情)
  • 如果已经到达,请让服务器发回“OK”,并让客户端跟踪URL(通过
    window.location

在所有情况下,您都需要检查目标URL上的时间戳,如果没有到达时间戳,则抛出“拒绝访问”警告。

您可以有两个计时器,一个是javascript,另一个是php。 javascript中的当前版本将保持不变,无需更改。 区别在于,当用户用php加载页面时,您在会话中保存了一个时间戳。然后,在要阻止的URL中,从会话获取时间戳,并检查是否经过了足够的时间。如果没有,那么您可以阻止、重定向或采取任何您想要的操作。 用户不会收到关于这个“其他”计时器的反馈,但是您可以确保用户是否有javascript活动,或者即使用户通过浏览器控制台篡改了您的html/javascript,他也无法在计时器结束之前访问您的“阻止”URL。
干杯。

我想一种方法是在倒计时结束后在URL中设置一个哈希或会话令牌。如果用户禁用了Javascript,会话令牌将不会应用于URL,并且URL将无效(您可以从PHP端进行检查)。由于这是一个短倒计时,您可以给用户一个计时器,在URL变为无效令牌之前单击该URL。我想我不理解“has a specific class”逻辑。用户可以随时从任何HTML元素中删除类,并绕过JS计时器限制。我喜欢这种方法,但我不知道它是否对我有效,因为我将有更多的页面,例如,我现在有一个页面有3天倒计时,完成后,我将有另一个页面有3天倒计时,等等。。。因此,每次我添加新页面时,链接开始工作的时间都应该更改?如果用户直接在浏览器地址栏中键入url而不单击链接,又该怎么办?我需要阻止他也这样做……关于你的第二个问题:正如我所说,当你在浏览器中加载受限制的页面时,你需要始终检查时间戳。如果用户输入得太快(无论他们是使用链接还是直接进入链接),您会抛出警告,并且不会显示真实页面。简而言之,实现JS部分并不重要,它将始终受到保护。JS只是让用户感觉更好,所以如果他们无论如何都不允许去那里,他们就看不到警告。你能给我一个简短的代码示例,说明我如何使用它吗?对于你的第一个问题:你可以创建特定于页面的超时。但是如果我们讨论的是3天,您可能无法使用会话,但最好创建一些依赖于数据库的解决方案。只需创建一个包含(至少)三列的表:一列用于用户ID,一列用于要访问的页面,一列用于时间戳。我喜欢这种方法,但我不知道它是否适合我,因为我将有更多的页面,例如,我将有一个页面现在有一个3天倒计时,在这之后,我将有另一个页面与另一个3天倒计时,依此类推。。。因此,每次我添加新页面时,链接开始工作的时间都应该更改?@Alecs一般来说,在所有情况下,您都需要检查目标URL上的时间戳,如果没有到达时间戳,则抛出“拒绝访问”警告。由史蒂夫设计是最好的解决方案