2017-01-25 109 views
0

我在審查chrome擴展,並遇到了這兩個我想澄清的疑惑。是否有必要爲chrome擴展設置事件偵聽器

在此我檢討,我能看到的代碼的一部分在正在使用下面的行代碼傳遞到內容腳本消息「background.js」文件擴展名:

chrome.tabs.query({active: !0, currentWindow: !0}, function (a) { 
chrome.tabs.sendMessage(a[0].id, {action: "process_page"}, function (a) { 
         }) 
        }) 
  1. 我的第一個查詢是在這裏傳遞了json-ified消息({action:「process_page」})。我無法在消息的代碼庫中找到任何關聯的偵聽器事件(process_page)。實際上,「process_page」在整個代碼庫中似乎只存在一次,在background.js文件中也只存在一次。所以,我想知道一個事件監聽器對於所有的chrome.tabs.sendMessage方法是強制的還是事件監聽器是可選的。

  2. 我的第二個問題是 - 從Google的chrome.tabs文檔 - https://developer.chrome.com/extensions/tabs#type-Tab,我瞭解到sendMessage方法的第一個參數對應於選項卡ID。但是,我想明白爲什麼它表示爲「a [0] .id」?

任何明確的指針或解釋將非常有幫助。

+1

查找鉻.runtime.onMessage,chrome.runtime.onConnect和已棄用的前任chrome.extension.onRequest。顯然,擴展處理任何消息,無論其內容如何。 – wOxxOm

+0

@wOxxOm感謝您的回覆。請問您能幫我理解您的意思「顯然,擴展程序處理任何消息,而不管其內容」。 – mbvee

+0

U嗯,它就是這個意思。擴展可能根本不在乎消息的實際內容,而是在收到消息的真實內容或消息的發送者上做某事,或者這個代碼可能是剩餘的,並且什麼也不做。 – wOxxOm

回答

0
  1. 事件偵聽器是可選的:但沒有偵聽器,發送的消息將不起作用。

  2. ,因爲函數的參數是Tab對象的數組(參見documentation for chrome.tabs.query它表示爲a[0].ida[0].id是由查詢返回的數組中的第一個選項卡的標籤標識。

+2

您應該展開#1來解釋所有收聽者都已設置爲收聽收到的所有消息。由聽衆來解碼消息的內容,以確定它是否知道如何處理(即解釋爲什麼'process_page'可能不在代碼中的任何其他地方)。 – Makyen

+0

感謝您的詳細澄清。那麼,你認爲在沒有在任何事件聽衆中處理它們的情況下,將信息保持在空中可能存在任何漏洞。 – mbvee

+0

@Viman我沒有看到漏洞,但創建一個對象以將它作爲參數傳遞,而不需要它是低效的。 –

相關問題