2013-11-15 64 views
1

我正在嘗試編寫我的第一個Firefox附加組件。主要的問題似乎是,我也是新來的JavaScript。目前,我有:Firefox附加組件聲明功能並在內容腳本中使用

require('sdk/page-mod').PageMod({ 
    include: ["*"], 
    contentScript: 'window.addEventListener("click", function(e) { alert("blub"); }, false);', 
    attachTo: ["existing", "top"] 
}); 

(THX答案here)。 現在我想用一個聲明的函數,而不是匿名之一,但我不能得到它的工作:

require('sdk/page-mod').PageMod({ 
    include: ["*"], 
    contentScript: 'window.addEventListener("click", function(e) { alert("blub"); }, false);', 
    attachTo: ["existing", "top"] 
}); 

getImgData function (e) { 
    alert("blubber3"); 
} 

第一個問題是我通過添加函數「missing; before statement」而得到語法錯誤。但是cfx並沒有告訴我錯誤的路線。 (有沒有用於js編輯的有用工具,具有良好的語法檢查/內容幫助?) 那麼如何聲明一個函數並在腳本的其他地方使用ist。最後,該功能需要獲得點擊目標並解析它。 (我讀的教程,但你都使用匿名函數:-P)

THX提前

回答

5

實現鉻腳本和內容腳本之間的分離是很重要的。 Chrome腳本是與Firefox相同的安全權限運行的腳本 - 它們可以完全訪問Firefox和計算機。內容腳本是與網頁具有相同特權的腳本。他們可以在網頁上亂七八糟,但受到嚴格限制。爲維護安全,the way these two types of scripts can communicate is limited。你不希望網頁能夠在你的擴展的內部代碼中調用它想要的任何函數!

您的主要JS文件(包含require('sdk/page-mod'))是一個chrome腳本。你注入的東西(顯然是)是一個內容腳本(contentScript)。他們無法通過直接函數調用進行通信,因爲您正在進行此操作。

如果您的getImgData函數是可以使用普通網頁權限完成的,您可以將其定義移至內容腳本中。如果它需要額外的權限,則必須通過上述鏈接中描述的emiton函數使您的內容腳本與您的chrome腳本進行通信。

如果您打算繼續使用您的內容腳本,我會建議您使用separate it into its own file以使您的生活更輕鬆。

+0

thx詳細解答 – dermoritz

相關問題