首次访问 JavaScript 同意 ToS

Posted

技术标签:

【中文标题】首次访问 JavaScript 同意 ToS【英文标题】:JavaScript On First Visit Agree to ToS 【发布时间】:2016-03-02 21:44:29 【问题描述】:

我正在尝试编写一个脚本,如果您以前从未访问过该站点,它将重定向到 /agree.htm,如果他们点击 OK,它将不会再次询问,但如果他们不点击,它将继续重定向到 /agree.htm 页面。 这是到目前为止的 javascript

function doit() 
    document.getElementById('uuid').innerhtml = generateUUID();
    var yes = getUrlVars()["agreed"];
    if (yes == "true") setCookie('VisitDate',1,365);    
    if (yes != "true")  window.location = "/agree.htm";

function getUrlVars() 
var vars = ;
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) 
vars[key] = value;
);
return vars;

function getCookie(NameOfCookie)
    if (document.cookie.length > 0)               
    begin = document.cookie.indexOf(NameOfCookie+"=");       
    if (begin != -1)            
      begin += NameOfCookie.length+1;       
      end = document.cookie.indexOf(";", begin);
      if (end == -1) end = document.cookie.length;
        return unescape(document.cookie.substring(begin, end));
     
  
  return null;


function setCookie(NameOfCookie, value, expiredays) 
var ExpireDate = new Date();
ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));

  document.cookie = NameOfCookie + "=" + escape(value) + 
  ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());


function delCookie (NameOfCookie) 
  if (getCookie(NameOfCookie)) 
    document.cookie = NameOfCookie + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  


function DoTheCookieStuff(LastChangeDate)

dt=new Date();
year=dt.getYear(); if (year<=9) year="0"+year;
month=dt.getMonth()+1; if (month<=9) month="0"+month;
date=dt.getDate(); if (date<=9) date="0"+date;
ThisDate=year+month+date;

LastVisitDate=getCookie('VisitDate');
if (LastVisitDate!=null) 
   if (LastVisitDate<LastChangeDate) 
    else 
    setCookie('VisitDate',ThisDate,365)
 

else window.location  = "\agree.htm";

它会设置 cookie,但会继续重定向到 /agree.htm 页面。

同意.HTM:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>StratHaxxs Co. ToS Agreement</title>
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <style>
  .ui-dialog-titlebar-close 
  visibility: hidden;

.ui-widget.success-dialog 
    font-family: Verdana,Arial,sans-serif;
    font-size: .8em;


.ui-widget-content.success-dialog 
    background: #F9F9F9;
    border: 1px solid #90d93f;
    color: #222222;


.ui-dialog.success-dialog 
    left: 0;
    outline: 0 none;
    padding: 0 !important;
    position: absolute;
    top: 0;


.ui-dialog.success-dialog .ui-dialog-content 
    background: none repeat scroll 0 0 transparent;
    border: 0 none;
    overflow: auto;
    position: relative;
    padding: 0 !important;
    margin: 0;


.ui-dialog.success-dialog .ui-widget-header 
    background: #b0de78;
    border: 0;
    color: #fff;
    font-weight: normal;


.ui-dialog.success-dialog .ui-dialog-titlebar 
    padding: 0.1em .5em;
    position: relative;
    font-size: 1em;

.ui-dialog .ui-dialog-buttonpane  
    text-align: center;


.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset  
    float: none;


</style>

  <script>
  $(function() 
  $('#success').dialog(
    height: 180,
    width: 350,
    modal: true,
    resizable: false,
    dialogClass: 'no-close success-dialog',
    buttons: 
        Ok: function() 
          $( this ).dialog( "close" );
          window.location.href = "/?agreed=true";
        
      
);
  );
  </script>
</head>
<body>

<div id="success"  title="Welcome!">
  <p>
  This is the first time you have visited our site, to continue to the site:
     Click 'Ok' if you agree to our <b>ToS</b>: <a href="/tos.html">Here</a><br><br>Otherwise press the back button or close this window. 
  </p>
</div>

</body>
</html>

【问题讨论】:

【参考方案1】:

Working Demo

看起来您的 Javascript 中列出了所有正确的函数,但它们没有被调用。

在页面加载时,您想检查 cookie 是否存在。如果没有,那么您需要显示 jQuery Dialog 模态。

我添加了一个删除 cookie 的按钮,以便您进行测试。

&lt;script&gt; 标记中删除 Javascript 并将其替换为:

Javascript

$( document ).ready(function() 
    $('#remove-cookie').click(function() 
        delCookie('agreeCookie');
        $('h1').text('Cookie Removed');
        $('#remove-cookie').hide();
    );
    var cookieStatus = getCookie('agreeCookie');
    console.log(cookieStatus);
    if (cookieStatus != 'true') 
        tryRedirect('agree.htm');
        $('#success').show().dialog(
            height: 180,
            width: 350,
            modal: true,
            resizable: false,
            dialogClass: 'no-close success-dialog',
            buttons: 
                Ok: function () 
                    setCookie('agreeCookie', true, 100);
                    $(this).dialog("close");
                    window.location.href = "index.html?agreed=true";
                
            
        );
    
    else 
        tryRedirect('index.html');
        $('#remove-cookie').show();
    
    function tryRedirect(target) 
        var url = window.location.pathname;
        var filename = url.substring(url.lastIndexOf('/') + 1);
        if (filename != target) 
            window.location.href = target;
        
    
);

测试

    打开Demo 并在对话框中单击确定(这将添加cookie)。 重新加载页面。 cookie 应该存在,您将被重定向到 index.html 并显示“删除 cookie”按钮(根据需要重复此步骤,它仍然应该这样做)。 按删除 cookie 按钮并重新加载。现在它应该重定向到agreement.htm 并再次显示对话框。

【讨论】:

我忘了说有:index.html 和agree.htm。索引的代码首先在我的帖子中,第二个是agreement.htm。对不起,混淆了,你能解决这个问题吗? :) 好的,现在应该可以了。我创建了一个多页演示。如果您有任何问题,请告诉我。

以上是关于首次访问 JavaScript 同意 ToS的主要内容,如果未能解决你的问题,请参考以下文章

js javascript 将一段字符串转为JSON格式,字符串转换问题

是否可以使用纯 CSS/HTML 而没有 JavaScript 来实现 GDPR Cookie 同意?不希望脚本阻止程序阻止它

未经资源所有者同意生成访问令牌的 OAuth 流程是啥?

Carbon Streaming宣布首次对蓝碳项目进行碳信用流投资

在访问 gmail api 时从进入同意屏幕的 url 获取 authuser

首次单击后,Javascript,CSS,按钮不调用动画函数[重复]