SharpSpring - 防止表单在用户填写表单时自动显示(不依赖于Cookie)

时间:2017-07-10 14:53:06

标签: forms cross-browser user-tracking fingerprinting sharpspring

好的,这与我不久前提出的问题有关:Silverstripe/PHP/jQuery - Once form has been filled out by user, prevent it from automatically appearing for each visit

此后发生了一些变化。根据客户的要求,如果用户已将其填写并已放入SharpSpring,则表单不得自动显示。最初,我正在使用JavaScript创建成功表单提交的cookie。然而,最新的担忧是它不够有效,因为cookie只能注册到某些设备和浏览器,用户可以随时清除它们。

基本上,如果用户已在SharpSpring(一个单独的域)中注册而不必依赖cookie,则所需的结果是防止表单自动出现。

有没有人试过这样的事情,检查用户是否已将表单提交到另一个域?

供参考,以下是我设置的表单代码:

<?php
/*
Plugin Name: SharpSpring Form Plugin
Description: A custom form plugin that is SharpSpring-compatible and uses HTML, CSS, jQuery, and AJAX
Version: 1.0
*/
define('SSCFURL', WP_PLUGIN_URL . "/" . dirname(plugin_basename(__FILE__)));

define('SSCFPATH', WP_PLUGIN_DIR . "/" . dirname(plugin_basename(__FILE__)));


function sharpspringform_enqueuescripts()
{
    wp_enqueue_script('jquery-src', SSCFURL . '/js/jquery.js', array('jquery'));
    wp_enqueue_script('jquery-ui', SSCFURL . '/js/jquery-ui.js', array('jquery'));
    wp_enqueue_script('boootstrap', SSCFURL . '/js/bootstrap.js', array('jquery'));

    wp_localize_script('sharpspringform', 'sharpspringformajax', array('ajaxurl' => admin_url('admin-ajax.php')));

}

add_action('wp_enqueue_scripts', 'sharpspringform_enqueuescripts');

function sharpspringform_show_form()

{
    wp_enqueue_style( 'boilerplate', SSCFURL.'/css/boilerplate.css');
    wp_enqueue_style( 'bootstrapcss', SSCFURL.'/css/bootstrap.css');
    wp_enqueue_style( 'bookregistration', SSCFURL.'/css/Book-Registration.css');
    wp_enqueue_style( 'formstyles', SSCFURL.'/css/styles.css');
    ?>
    <div class="mobile-view" style="right: 51px;">
        <a class="mobile-btn">
            <span class="glyphicon glyphicon-arrow-left icon-arrow-mobile mobile-form-btn"></span>
        </a>
    </div>
    <div class="slider register-photo">
        <div class="form-inner">
            <div class="form-container">
                <form method="post" enctype="multipart/form-data" class="signupForm" id="browserHangFormPV">
                    <a class="sidebar">
                        <span class="glyphicon glyphicon-arrow-left icon-arrow arrow"></span>
                    </a>
                    <a class="closeBtn">
                        <span class="glyphicon glyphicon-remove"></span>
                    </a>

                    <h2 class="text-center black">Sign up for our newsletter.</h2>

                    <p class="errors-container light">Please fill in the required fields.</p>

                    <div class="success">Thank you for signing up!</div>
                    <div class="form-field-content">
                        <div class="form-group">
                            <input class="form-control FirstNameTxt" type="text" name="first_name" placeholder="*First Name"
                                   autofocus="">
                        </div>
                        <div class="form-group">
                            <input class="form-control LastNameTxt" type="text" name="last_name" placeholder="*Last Name"
                                   autofocus="">
                        </div>
                        <div class="form-group">
                            <input class="form-control EmailTxt" type="email" name="email" placeholder="*Email"
                                   autofocus="">
                        </div>
                        <div class="form-group">
                            <input class="form-control CompanyTxt" type="text" name="company" placeholder="*Company"
                                   autofocus="">
                        </div>
                        <div class="form-group submit-button">
                            <button class="btn btn-primary btn-block button-submit" type="button">SIGN ME UP</button>
                            <img src="/wp-content/plugins/sharpspring-form/img/ajax-loader.gif" class="progress" alt="Submitting...">
                        </div>
                    </div>
                    <br/>
                   <div class="privacy-link">
                        <a href="[privacy policy link]" class="already" target="_blank"><span
                                class="glyphicon glyphicon-lock icon-lock"></span>We will never share your information.</a>
                    </div>
                </form>
                    <input type="hidden" id="gatewayEmbedID" value="<?php echo get_option( 'pv_signup_sharpspring_ID' ); ?>" />
                    <script type="text/javascript">
                        var embedID = document.getElementById("gatewayEmbedID").value;
                        var __ss_noform = __ss_noform || [];
                        __ss_noform.push(['baseURI', 'https://app-3QNAHNE212.marketingautomation.services/webforms/receivePostback/[redacted]']);
                        __ss_noform.push(['form', 'browserHangFormPV', embedID]);
                        __ss_noform.push(['submitType', 'manual']);

                    </script>
                    <script type="text/javascript" src="https://koi-3QNAHNE212.marketingautomation.services/client/noform.js?ver=1.24" ></script>

            </div>
        </div>
    </div>

<?php   
}

function sharpspringform_shortcode_func( $atts )
{
    ob_start();
    sharpspringform_show_form();
    $output = ob_get_contents();
    ob_end_clean();
    return $output;
}
add_shortcode( 'sharpspringform', 'sharpspringform_shortcode_func' );

表单提交代码使用JS生成cookie:

;
(function ($) {
    $(document).ready(function () {
        var successMessage = $('.success');
        var error = $('.errors-container');
        var sharpSpringID = $('#gatewayEmbedID').val();
        var submitbtn = $('.button-submit');
        var SubmitProgress = $('img.progress');

        var formdata = {};

        function setCookie(cname, cvalue, exdays) {
            var d = new Date();
            d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
            var expires = "expires=" + d.toGMTString();
            document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
        }

        submitbtn.click(function (e) {
            resetErrors();
            postForm();
        });

        function resetErrors() {
            $('.signupForm input').removeClass('error-field');
        }

        function postForm() {
            $.each($('.signupForm input'), function (i, v) {
                if (v.type !== 'submit') {
                    formdata[v.name] = v.value;
                }
            });

            submitbtn.hide();
            error.hide();
            SubmitProgress.show();

            $.ajax({
                type: "POST",
                data: formdata,
                url: '/wp-content/plugins/sharpspring-form/sharpsring-form-submission.php',
                dataType: "json"
            }).done(function (response) {
                submitbtn.show();
                SubmitProgress.hide();
                if (response.errors) {
                    error.show();
                    var errors = response.errors;
                    errors.forEach(function (error) {
                        $('input[name="' + error + '"]').addClass('error-field');
                    })
                }

                else {
                    __ss_noform.push(['submit', null, sharpSpringID]);
                    setCookie('SignupSuccess', 'NewsletterSignup', 3650);
                    $('#browserHangFormPV')[0].reset();
                    $('.form-field-content').hide();
                    successMessage.show();
                    $('.button-submit').html("Submitted");
                }

            });
        }
    });
}(jQuery));

设置表单滑动动画和弹出功能的jQuery代码,以及检查在成功表单提交时创建的JS cookie的存在:

jQuery.noConflict();

(function ($) {

    $(document).ready(function () {
    //This function checks if we are in mobile view or not to determine the
    //UI behavior of the form.
        checkCookie();
        window.onload = checkWindowSize();

        var arrowicon = $(".arrow");
        var overlay = $("#overlay");
        var slidingDiv = $(".slider");
        var closeBtn = $(".closeBtn");
        var mobileBtn = $(".mobile-btn");

    //When the page loads, check the screen size.
    //If the screen size is less than 768px, you want to get the function
    //that opens the form as a popup in the center of the screen
    //Otherwise, you want it to be a slide-out animation from the right side

        function checkWindowSize() {
            if ($(window).width() <= 768) {
                //get function to open form at center of screen
                if(sessionStorage["PopupShown"] != 'yes' && !checkCookie()){
                    setTimeout(formModal, 5000);
                    function formModal() {
                        slidingDiv.addClass("showForm")
                        overlay.addClass("showOverlay");
                        overlay.removeClass('hideOverlay');
                        mobileBtn.addClass("hideBtn");
                    }
                }
            }
            else {
                //when we aren't in mobile view, let's just have the form slide out from the right
                if(sessionStorage["PopupShown"] != 'yes' && !checkCookie()){
                    setTimeout(slideOut, 5000);
                    function slideOut() {
                        slidingDiv.animate({'right': '-20px'}).addClass('open');
                        arrowicon.addClass("glyphicon-arrow-right");
                        arrowicon.removeClass("glyphicon-arrow-left");
                        overlay.addClass("showOverlay");
                        overlay.removeClass("hideOverlay");
                    }
                }
            }
        }

        function getCookie(cname) {
            var name = cname + "=";
            var ca = document.cookie.split(';');
            for(var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        }

        function checkCookie() {
            var user = getCookie("SignupSuccess");
            if (user != "") {
               return true;
            } else {
                return false;
            }
        }

        /*
         ------------------------------------------------------------
         Functions to open/close form like a modal in center of screen in mobile view
         ------------------------------------------------------------
         */

        mobileBtn.click(function () {
            slidingDiv.addClass("showForm");
            slidingDiv.removeClass("hideForm");
            overlay.addClass("showOverlay");
            overlay.removeClass('hideOverlay');
            mobileBtn.addClass("hideBtn");
        });
        closeBtn.click(function () {
            slidingDiv.addClass("hideForm");
            slidingDiv.removeClass("showForm");
            overlay.removeClass("showOverlay");
            overlay.addClass("hideOverlay")
            mobileBtn.removeClass("hideBtn");
            sessionStorage["PopupShown"] = 'yes'; //Save in the sessionStorage if the modal has been shown
        });


        /*
         ------------------------------------------------------------
         Function to slide the sidebar form out/in
         ------------------------------------------------------------
         */
        arrowicon.click(function () {
            if (slidingDiv.hasClass('open')) {
                slidingDiv.animate({'right': '-390px'}, 200).removeClass('open');
                arrowicon.addClass("glyphicon-arrow-left");
                arrowicon.removeClass("glyphicon-arrow-right");
                overlay.removeClass("showOverlay");
                overlay.addClass("hideOverlay");
                sessionStorage["PopupShown"] = 'yes'; //Save in the sessionStorage if the modal has been shown

            } else {
                slidingDiv.animate({'right': '-20px'}, 200).addClass('open');
                arrowicon.addClass("glyphicon-arrow-right");
                arrowicon.removeClass("glyphicon-arrow-left");
                overlay.addClass("showOverlay");
                overlay.removeClass("hideOverlay");
            }

        });

    });


}(jQuery));

1 个答案:

答案 0 :(得分:0)

我对这里的WordPress代码感到困惑,而不是SilverStripe,在你的问题中你不清楚你正在使用哪个平台。

基本上,如果您想要比cookie更强大的东西,您需要将注册存储在数据库中并在那里进行检查(假设注册表单在您的网站上)。这意味着您处理站点上的表单提交,将数据发送到远程站点并检查响应,如果一切顺利,请保存用户已远程注册到数据库中的事实,您可以在何时确定是否显示形式与否,下次。

如果您无权访问注册表单,或者您还想要注意独立于您的网站进行注册,那么您需要拥有一个可以在远程站点上查询的API,以查看该用户是否是注册。

我找到了a sharpspring API,但我不确定它是否相关。