2016-02-29 73 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

相關問題