2014-10-11 109 views
0

我正在研究一個簡單的擴展,它基於瀏覽器中的某些用戶操作將消息發送到一個彈出腳本,然後該腳本又調用後臺腳本中的函數。我是新開發的Chrome擴展程序,請耐心等待。異常郵件檢測

目前,我有一個設置,檢測用戶在內容腳本瀏覽器中的操作,發送消息到彈出腳本,並調用檢測到的背景頁面中的功能(或者我相信,我沒有通過background.js獲取警報或日誌以顯示任何地方)。

我的問題是:爲什麼在從後臺腳本發送消息時沒有檢測到消息,並且是在我的後臺腳本中被調用的函數呢?

的manifest.json

{ 
    ... 
    "browser_action": { 
    "default_icon": "gamify.png", 
    "default_popup": "user_stats.html" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["jquery.min.js", "contentscript.js"], 
     "run_at": "document_end" 
    } 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "permissions": [ 
    "storage" 
    ] 
} 

contentscript.js

$(document).ready(function() { 
    $("#page-container").click(function() { 
    chrome.runtime.sendMessage({ 
     action: "Load" 
    }); 
    }); 
}); 

//彈出腳本

$(document).ready(function() { 

    var bg = chrome.extension.getBackgroundPage(); 

    chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    var action = request.action; 
    if (action == "Load") { 
     bg.initialize(); 
    } 
    }); 
}); 

background.js

function initialize() { 

    chrome.runtime.sendMessage({ 
    action: "Start" 
    }); 

    chrome.storage.sync.get("initialized", function(data) { 
    alert("BS: Get initialized: " data); 
    //Do stuff here 
    }); 
} 
+0

你能解釋一下把這個「代理」代碼放在彈出窗口背後的邏輯嗎? – Xan 2014-10-11 22:22:44

+0

更進一步,我打算讓彈出式js處理內容和後臺腳本之間的消息/數據傳遞,同時使用該數據修改顯示彈出框中的元素。 – Chris 2014-10-11 22:25:41

+0

壞主意。我會解釋爲什麼。 – Xan 2014-10-11 22:33:30

回答

0

你爲什麼要以迂迴的方式來做這件事?

彈出頁面只在顯示時才存在;如果彈出窗口未打開,則沒有任何內容會聽取您的消息,並且會丟失。由於它非常脆弱,它不適合用於消息路由。

所以,第1步:從彈出窗口中刪除郵件路由。意識形態上,後臺頁面「始終存在」,並處理大部分操作。你可以通過聽chrome.storage.onChanged來控制彈出窗口的顯示,或者只是彈出不同的消息。


但是,您也已宣佈背景頁面有"persistent" : false,即它是一個Event page。這意味着它總是不存在總是

順便說一下,如果頁面被卸載,這將導致chrome.extension.getBackgroundPage不時失敗。

你有兩個選擇:

  1. 刪除"persistent": false。事件頁面很難處理,所以如果你是新手,你可能想跳過它。

  2. 請仔細閱讀活動頁面文檔。它列出了你必須處理的限制。

+0

感謝您花時間爲新手解釋一些事情,非常感謝。我一直在寫,因爲我一直在閱讀,所以一個領域的進步導致了另一個領域的倒退。我會花更多時間處理你的建議。 – Chris 2014-10-11 23:29:54