2

我正在写一个js文件

    checkCookiesAccepted();

    function checkCookiesAccepted() {
        if (!$.cookie("acecptcookies")) {
            showCookieBar();
            attachPageChangedEvents();
        }
    }


function attachPageChangedEvents(){
            // get all internal a hrefs and override onclick event so we can record acceptance
            var siteURL = "http://" + top.location.host.toString();

            //$("a[href^='"+siteURL+"'], a[href^='/'], a[href^='./'], a[href^='../'], a[href^='#']").click(acceptCookies);
            $("#middle a").click(acceptCookies);
        }
function acceptCookies(){
            $.cookie("acecptcookies", "1", { path: '/', expires: 20*365 });

        }
        function showCookieBar(){
            // create div elements to body element unless another is supplied
            $("<div id='tscookiebar'><div>This site uses cookies. To find out more about the cookies this site uses and how to manage them, please review the cookies section of our <a href='http://www.myproduct.co.uk/privacy_policy/PrivacyPolicy.pdf' target='_blank'>Privacy Policy</a>. By using our website, you agree that we can place these types of cookies on your device.</div></div>").prependTo("body");
        }
        $.cookie = function(key, value, options) {

                    // key and at least value given, set cookie...
                    if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
                        options = $.extend({}, options);

                        if (value === null || value === undefined) {
                            options.expires = -1;
                        }

                        if (typeof options.expires === 'number') {
                            var days = options.expires, t = options.expires = new Date();
                            t.setDate(t.getDate() + days);
                        }

                        value = String(value);

                        return (document.cookie = [
                            encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
                            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
                            options.path    ? '; path=' + options.path : '',
                            options.domain  ? '; domain=' + options.domain : '',
                            options.secure  ? '; secure' : ''
                        ].join(''));
                    }

                    // key and possibly options given, get cookie...
                    options = value || {};
                    var decode = options.raw ? function(s) { return s; } : decodeURIComponent;

                    var pairs = document.cookie.split('; ');
                    for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
                        if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
                    }
                    return null;
                };

我还包括 jquery.min.js 和 jquery.cookie.js 但仍然给出错误 Uncaught TypeError: Object function (e,t){return new x.fn.init(e,t,r)} has no method 'cookie '

4

2 回答 2

7

给出一个错误 Uncaught TypeError: Object function (e,t){return new x.fn.init(e,t,r)} has no method 'cookie'

好的,这告诉我们您确实加载了 jQuery(因为这就是缩小的 jQuery 函数的样子)并且 jQuery 正在使用该$符号,但是由于某种原因,cookie 插件在您的 jQuery 函数中不存在'正在运行该代码。可能的原因:

  1. 您的 cookie 插件路径不正确,您收到 404。

  2. 您在加载cookie 插件jquery.min.js加载 jQuery,无论是第一次(在之后jquery.cookie.js)还是您不小心第二次加载它,覆盖了第一次。

  3. 您在加载 jQuery之后但加载 cookie 插件之前运行您的代码。

  4. 你有script标签的正确顺序,因为你已经使用了它们的async属性,所以它们被乱序执行。

  5. 您正在script使用代码(而不是标记)添加元素。当您使用代码而不是标记添加脚本时,不能保证它们的执行顺序。

如果你有这个:

<script src="/path/jquery.min.js"></script>
<script src="/path/jquery.cookie.js"></script>
<script src="/path/your.script.js"></script>

...而且您没有收到任何 404 错误,它应该可以工作。

于 2013-10-28T11:52:48.193 回答
0

演示 jsFiddle

描述

一切似乎都按预期工作。


JS

$(function(){
    checkCookiesAccepted();
});

function checkCookiesAccepted() {
    if (!$.cookie("acecptcookies")) {
        showCookieBar();
        attachPageChangedEvents();
    }
}


function attachPageChangedEvents() {
    // get all internal a hrefs and override onclick event so we can record acceptance
    var siteURL = "http://" + top.location.host.toString();

    //$("a[href^='"+siteURL+"'], a[href^='/'], a[href^='./'], a[href^='../'], a[href^='#']").click(acceptCookies);
    $("#middle a").click(acceptCookies);
}

function acceptCookies() {
    $.cookie("acecptcookies", "1", {
        path: '/',
        expires: 20 * 365
    });

}

function showCookieBar() {
    // create div elements to body element unless another is supplied
    $("<div id='tscookiebar'><div>This site uses cookies. To find out more about the cookies this site uses and how to manage them, please review the cookies section of our <a href='http://www.msdproduct.co.uk/privacy_policy/PrivacyPolicy.pdf' target='_blank'>Privacy Policy</a>. By using our website, you agree that we can place these types of cookies on your device.</div></div>").prependTo("body");
}
$.cookie = function (key, value, options) {

    // key and at least value given, set cookie...
    if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
        options = $.extend({}, options);

        if (value === null || value === undefined) {
            options.expires = -1;
        }

        if (typeof options.expires === 'number') {
            var days = options.expires,
                t = options.expires = new Date();
            t.setDate(t.getDate() + days);
        }

        value = String(value);

        return (document.cookie = [
            encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
            options.path ? '; path=' + options.path : '',
            options.domain ? '; domain=' + options.domain : '',
            options.secure ? '; secure' : ''].join(''));
    }

    // key and possibly options given, get cookie...
    options = value || {};
    var decode = options.raw ? function (s) {
        return s;
    } : decodeURIComponent;

    var pairs = document.cookie.split('; ');
    for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
        if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
    }
    return null;
};
于 2013-10-28T12:12:51.143 回答