0

我正在做一個Chrome擴展,在我的擴展中,我正在從內容腳本向後臺腳本發送消息。如何在chrome擴展中按順序運行javascript函數中的語句?

chrome.runtime.onMessage.addListener(
    function triggerNew(request) { 
    if (request.method == "addNew") { 
     //alert("in content script"); 
     var x=startClick(); 
     chrome.runtime.sendMessage({name: "Response" , data : x}); 
    } 
    } 
); 

`function startClick(){ 
document.addEventListener('click', function(e){ 
var target = e.target || event.srcElement; 
return target; 
}` 

我呼籲我的內容腳本功能startClick,但響應消息是越來越之前startClick執行發送。

如何使它從startClick函數發送變量x中獲得的數據?

+1

幾乎可以肯定[這個副本(http://stackoverflow.com/questions/14220321/how-to-return-the-a-ajax-call),但問題是缺少'startClick'函數。 – Quentin

+0

我經歷了那個鏈接,但不能理解太多。你能告訴我如何在這裏實現嗎? @Quentin –

+0

語句不會重新排序。 statClick在sendMessage之前被調用。我懷疑你在startClick裏面做了一些異步的事情,給我們看一些更多的代碼。 –

回答

1

我不認爲startClick是在chrome.runtime.sendMessage之後調用的,問題在於你在使用回調方法。

您的回調方法的簽名必須是這樣的:

function(any message, MessageSender sender, function sendResponse) {...}; 

要發送到到chrome.runtime.onMessage.addListener呼叫的響應,則必須使用這裏的文檔指出的sendResponse功能: https://developer.chrome.com/extensions/runtime#event-onMessage

重要注意:如文檔中所示(請確保您全部閱讀),您的回調函數必須返回true以保持sendResponse函數的有效性。如果您想從異步功能調用sendResponse,這一點很重要。

編輯:試試這個

背景:

chrome.runtime.onMessage.addListener(
    function triggerNew(request, sender, sendResponse) { 
     if (request.method == "addNew") { 
      var x = startClick(); 
      sendResponse({ 
       data: x 
      }); 
     } 
    } 
); 

內容腳本:

chrome.extension.sendMessage({method: 'addNew'} , function(response) { 
    alert(response.data); 
}); 
相關問題