2012-01-24 48 views
0

我有一個谷歌瀏覽器擴展,其中我創建了一個後臺頁面查詢我的擴展的設置,在我的情況下,我只是查詢爲啓用/禁用變量。chrome.request.sendRequest()中的document.addEventListener()問題

首先,這裏是在manifest.json:

{ 
    "name": "Foo", 
    "version": "0.1", 
    "description": "", 
    "icons": { 
     "128": "128.png", 
     "48": "48.png", 
     "16": "16.png" 
    }, 
    "content_scripts": [{ 
     "all_frames": true, 
     "js": ["foo.js"], 
     "matches": ["http://*/*", "https://*/*"], 
     "run_at": "document_start" 
    }], 
    "background_page" : "background.html", 
    "browser_action": { 
     "default_icon": "icons/19x19.png", 
     "default_title": "Foo", 
     "default_popup": "popup.html" 
    } 
} 

後臺頁面的JavaScript看起來像這樣:

FooApp = {}; 
FooApp.enabled = 1; 

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
     if (request.getSetting == "enabled") { 
      sendResponse({result: FooApp.enabled}); 
     } 
    } 
); 

,並在我的內容腳本,我查詢後臺頁面,看看是否腳本啓用&應該執行:

(function() { 
    chrome.extension.sendRequest({getSetting: "enabled"}, function(response) { 
     console.log("in sendRequest callback"); 
     if (response.result == 1) { 
      console.log("in response.result = 1"); 
      document.addEventListener("beforeload", function(event) { 
       console.log("in beforeload callback"); 
      }, true); 
     } else { 
      console.log("in response.result = 0"); 
     }; 
    }); 
}()); 

當我運行此,我可以看到控制檯日誌「中response.result = 1」

  1. 「在sendRequest將回調」
  2. ,但我不明白的控制檯日誌「在beforeload回調」,這在「beforeload」事件偵聽器的回調中。

    有什麼,我失蹤....我期待前負荷回調觸發,看到控制檯日誌消息,但我不知道。我試圖查詢我的應用程序,以檢查它是否在我的beforeload eventlistener中處理任何代碼之前啓用。

    的代碼時,我刪除比beforeload事件偵聽器註冊,例如:其他一切都正常運行

    document.addEventListener("beforeload", function(event) { 
        console.log("in beforeload callback"); 
    }, true); 
    

    看來,當它嵌套在一個chrome.extension.sendRequest內的事件監聽器永遠不會被註冊?如果我不能使用此路線查詢我的應用程序設置,有沒有更好的方法來做到這一點?

回答

0

在load事件觸發後附加事件偵聽器。

(function() { 
// load event has already fired. 
... 
}()); 

相反,你應該只執行if裏面的代碼,你要的事件監聽器裏放置。