为iframe弹出窗口设置cookie以使其保持关闭状态

时间:2018-04-15 13:38:45

标签: javascript iframe cookies jquery-cookie typeform

我正在使用TypeForm来处理我的潜在客户生成表单。我正在使用的表单已嵌入我网站的主页。每次加载主页时,此嵌入都会创建一个显示弹出窗口的iframe,即使单击“X”也是如此。

在联系过TypeForm之后,我被告知我需要设置一个cookie来防止每次弹出加载。事实上,他们的答复是“为了确保只有在您必须向您的网站添加Cookie才能确保只显示一个字体,以确保用户只能看到它一次。这不是我们目前拥有的功能,但希望有更多请求它是什么东西我们可以添加!“

嵌入代码:

<a class="typeform-share button" href="https://example.typeform.com/to/fbPnzs" data-mode="drawer_left" data-auto-open=true target="_blank" style="display:none;"></a>
<script>
    (function() {
    var qs, js, q, s, d = document,
        gi = d.getElementById,
        ce = d.createElement,
        gt = d.getElementsByTagName,
        id = "typef_orm_share",
        b = "https://embed.typeform.com/";
    if (!gi.call(d, id)) {
        js = ce.call(d, "script");
        js.id = id;
        js.src = b + "embed.js";
        q = gt.call(d, "script")[0];
        q.parentNode.insertBefore(js, q)
    }
})()
</script>

嵌入URL是example.typeform.com,而要嵌入表单的网站则不一样。是否需要考虑同源?

我需要在我的WordPress网站的functions.php文件的代码方面实现什么来添加一个cookie,允许弹出窗口只显示一次和/或如果单击“X”则永远不再显示?< / p>

2 个答案:

答案 0 :(得分:1)

感谢Nicolas的回答!

检查完SDK后,我已经改编了Nicolas&#39;片段以迎合左侧绘制弹出窗口。这将检查cookie是否存在,如果不存在,则应设置它并显示左侧绘制TypeForm弹出窗口;如果cookie确实存在,它就不会显示。

var url = "https://demo.typeform.com/to/njdbt5" // Update with your TypeForm URL
let params = new URLSearchParams( location.search );
url += "?utm_source=" + params.get( 'utm_source' ); // Replace with the hidden values you want to pass

var displayed = getCookie( "typeform_displayed" ); // Check for the cookie typeform_displayed
if ( displayed ) {
    null
} else if ( !displayed && displayed === "" ) {
    setCookie( "typeform_displayed", true, 365 ); // Set typeform_displayed cookie with a value of true and an expiry of 365 days
    showEmbed();
}

//
function showEmbed() {
    window.typeformEmbed.makePopup( url, {
        mode: 'drawer_left',
        autoOpen: true,
        hideHeaders: true,
        hideFooters: true,
    } )
}

// Cookie Manipulation
// Source: https://www.w3schools.com/js/js_cookies.asp
function setCookie( cname, cvalue, exdays ) {
    var d = new Date();
    d.setTime( d.getTime() + ( exdays * 24 * 60 * 60 * 1000 ) );
    var expires = "expires=" + d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie( cname ) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent( document.cookie );
    var ca = decodedCookie.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 "";
}

答案 1 :(得分:0)

我认为使用Typeform Embed SDK完全可行。

您需要检查Cookie是否已设置。并且取决于值显示或不是嵌入类型。

我在Glitch上做了一个工作示例,你可以看一下here

在代码中,逻辑看起来像这样:

var displayed = getCookie("displayed_typeform");

if (displayed){
  embedElement.innerHTML="<h2>Typeform already displayed once.</h2>"
} else if (!displayed && displayed === "") {
  setCookie("displayed_typeform", true, 365);
  showEmbed();
}

希望有所帮助:)