3

我最近在 MTurk HIT 中使用 javascript cookie时遇到了问题。特别是我正在尝试跟踪显示/隐藏 HIT 指令的用户偏好。

到目前为止,我的方法如下:

<body>
    <div id='instructionButton'>
        <!-- Button triggering instruction body to collapse/show -->
    </div>
    <div id='instructionBody'>
        <!-- Instruction content (collapsible) -->
        ...
    </div>
</body>
<script>
    const instructionBodyId = 'instructionBody';
    const instructionButtonId = 'instructionButton';

    const cookieName = 'my_cookie_name';
    var isInstructionShown = true;

    var instrContent = $('#' + instructionBodyId);
    var instrButton = $('#' + instructionButtonId);


    function setCookie(name, value) {
        var date = new Date();
        <!-- Cookie valid for 48h -->
        date.setTime(date.getTime() + (48 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toUTCString();
        document.cookie = name + "=" + value + expires + "; path=/";
    }

    function getCookie(name) {
        var nameEQ = name + "=";
        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, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }
        return null;
    }

    function toggleInstructions(isShow) {
        setCookie(cookieName, isShow);
        isInstructionShown = isShow;

        if (isShow) {
            instrContent.slideDown();
        } else {
            instrContent.slideUp();
        }
    }

    function prepare_cookie() {
        instrButton.click(function() {
            toggleInstructions(!isInstructionShown);
        });

        let cookieVal = getCookie(cookieName);
        if (cookieVal == "false") {
            toggleInstructions(false);
        } else {
            toggleInstructions(true);
        }
    }

    $(document).ready(function() {
        prepare_cookie();
    });
</script>

上面的代码显示了我正在创建的 HIT 布局的一部分,并且在直接在 MTurk 中编辑 HIT 时对其进行测试时,cookie 按预期工作(它显示在 Google Chrome 中并按预期工作,自动显示/隐藏指令)。

不幸的是,在发布 HIT 时,似乎没有设置 cookie(它没有出现在 Google Chrome 中显示的 cookie 列表中)。

4

0 回答 0