2016-02-29 79 views
0

我正在尝试创建一个简单的Chrome扩展。当用户点击一个复选框时,一些数据将被发送到后台脚本,并从那里弹出。的数据被成功地发送,它是在弹出在Chrome扩展中收到响应后执行脚本

$(document).ready(function() { 
    chrome.runtime.sendMessage({ 
    from: 'popup', 
    subject: 'getmessage', 
    }, function(response) { 
    for (var x = 0; x < JSON.parse(response).length; x++) { 
     localStorage.setItem(JSON.parse(response)[x].acnumber, JSON.stringify(JSON.parse(response)[x])); 
    } 
    }); 
    for (var i = 0, len = localStorage.length; i < len; i++) { 
    var datas = JSON.parse(localStorage.getItem(localStorage.key(i))); 
    var value = datas; 
    console.log(value); 
    $('table').append('<tr class="' + value.acnumber + '"><td>' + value.acnumber + '</td><td>' + value.name + '</td><td>' + value.amount + '</td></tr>') 
    } 
}) 

存储在localStorage的问题是,我必须打开弹出两次来查看数据(附加到表)。在将数据添加到本地存储之前,循环正在执行

+0

您可以通过使用setTimeout进行延迟,并在一段时间后才打开弹出窗口,以便加载数据。这不是一个好的解决方案,但可以用于临时解决方案 –

+0

获得响应后,您能不能将'append'附加到'table'?为什么在这里需要'localstorage'? – aandis

+0

@zack这必须在多个页面上工作,所以如果只是追加表格,我将失去另一个页面中的数据。 – Akshay

回答

1

如果要在响应回调触发后立即处理数据,则需要在响应函数内移动append表代码。由于您提到您需要多个页面上的数据,因此您可以将chrome.runtime.sendMessage移动到其自己的功能中,并且只有在您还没有数据时才能调用它。类似于

function getMessage() { 
    chrome.runtime.sendMessage({ 
    from: 'popup', 
    subject: 'getmessage', 
    }, function(response) { 
    localStorage['haveMessage'] = true; 
    for (var x = 0; x < JSON.parse(response).length; x++) { 
     localStorage.setItem(JSON.parse(response)[x].acnumber, JSON.stringify(JSON.parse(response)[x])); 
    } 
    processMessage(); 
    }); 
} 

function processMessage() { 
    for (var i = 0, len = localStorage.length; i < len; i++) { 
    var datas = JSON.parse(localStorage.getItem(localStorage.key(i))); 
    var value = datas; 
    console.log(value); 
    $('table').append('<tr class="' + value.acnumber + '"><td>' + value.acnumber + '</td><td>' + value.name + '</td><td>' + value.amount + '</td></tr>') 
    } 
} 

if (locaStorage['haveMessage']) { 
    processMessage(); 
} else { 
    getMessage(); 
} 
+0

谢谢这可能会工作(对不起,我不能测试这个作为这个工程的网站下来)。设置'localStorage'中的'haveMessage'将会(可能)第一次工作,但第二次呢?我的意思是if语句将为真 – Akshay

+0

@Akshay'if'语句为真意味着你已经拥有存储在'localstorage'中的数据。只需要将它附加到表格中。 – aandis

+0

当你第一次运行它时,它按预期工作,但在此之后'haveMessage'是真的,所以无论你做了什么'haveMessage'都将是真的,因为一旦在localStorage中设置了一个值,它将一直保持到它被清除。 – Akshay

相关问题