Javascript localStorage在Chrome中运行,而不是Safari

时间:2016-02-03 15:55:05

标签: javascript firebase

此代码最初按预期工作,但在昨天检查后,它在Safari中不再有效(它仍可在Chrome和Firefox中正常运行)。

以下是我要做的事情:我在可见函数之外声明变量“salonSelection”然后我有一个在salonSelection中放置值的click函数。沙龙选择然后被放入localStorage。然后,单击功能将窗口发送到新位置。这可以按预期工作,但Safari不会在点击功能之外传递变量。

这是代码,为了便于阅读,我尽可能地评论。在最底部是什么给了我一个空值。感谢您提前提供的任何帮助:

    var salonSelection

// fetch a list of salons in DB
allRef.child("salons").on('child_added', function(snapshot) {

// for each group, fetch the name and print it
    var salonId = snapshot.key();
    allRef.child("salons/" + salonId + "/salonName").once('value', function(snapshot) {

        // Creates a new row for each item in table
        var newRow = $('<tr>').text('').appendTo('#searchTable');

        // Adds a cell for each salonName in row
        var nameCell = $('<td>').text(snapshot.val()).appendTo(newRow);

        // Adds an id of the salon name + 'Id' to each row
        var cellId = nameCell.attr("id", snapshot.val().replace(/\s+/g, '') + "Id")

        // Changes class of each cell
        nameCell.addClass("text-left font-w600 text-primary");

        // Passes clicked salon name to a variable for use on another page
        $('#searchTable tr td').click(function(){

            // Acquires text value of the specific td of tr
            salonSelection = $(this)[0].childNodes[0].nodeValue

            // Saves the variable to local storage
            delete localStorage.salonSelection;
            window.localStorage.salonSelection = salonSelection;

            // Sends user to new location
            window.location = 'base_pages_schedule_1.html';
        });
    });
});

// Attempting to retrieve the localStorage object, this is null in Safari only
$('#salon-name').click(function() {
    console.log(localStorage.salonSelection)
})

在使用.data()的建议之后,我添加了一些额外的代码进行测试。现在undefined的结果将被记录到所有浏览器的控制台。

            // Passes clicked salon name to a variable for use on another page
        $('#searchTable tr td').click(function(){

            // Acquires text value of the specific td of tr
            salonSelection = $(this).text()

            $(this).data("salonSelection", { name1: salonSelection});
            test = $(this).data("salonSelection").name1;

            // The value IS being stored and retrieved accurately here
            console.log(test)

            // Saves the variable to local storage 
            delete localStorage.salonSelection;
            window.localStorage.salonSelection = salonSelection;
            window.location = 'base_pages_schedule_1.html';
        });
    });
});

// Attempting to retrieve the .data() object, this is undefined
$('#salon-name').click(function() {
    console.log(test)
});

仔细检查后,重新启动Safari浏览器只允许整个功能正常运行(这是我提供的初始代码)。每次在此之后,$('#salon-name').click()函数仅记录第一次运行时存储的元素。

1 个答案:

答案 0 :(得分:0)

http://caniuse.com/#search=localstorage建议Safari可以使用localStorage,因此我不会认为它就是这样。

调试到点击处理程序,并从td获取后查看salonSelection的值是什么。我的猜测是空白,产生你看到的价值。

为什么呢?我猜测那里的其他标记或节点会使$(this)[0].childNodes[0].nodeValue的行为不像你期望的那样。您可以尝试将其简化为$(this).text(),看看它是否能为您提供您正在寻找的数据。如果这不起作用,请尝试将值存储在$(..).data()而不是可见文本中。