2009-08-18 106 views
0

我已經編寫了一個Firefox擴展,可以捕獲何時輸入特定URL並執行某些操作。我的主應用程序通過此URL啓動Firefox。該網址包含敏感信息,所以我不希望它被存儲在歷史記錄中。書籤如何訪問Firefox擴展(或反之亦然)

我很關心擴展沒有安裝的情況。如果它未安裝並且Firefox使用敏感的URL啓動,它將被存儲在歷史記錄中,我無能爲力。所以我的想法是使用書籤。

我將推出Firefox瀏覽器 「的javascript:window.location.href = 'pleaseinstallthisplugin.html'; sensitiveinfo = 'blahblah'」。

如果未安裝擴展它們可能會被重定向到一個頁面,告訴他們來安裝它和敏感信息將不會保存在歷史記錄。如果安裝了擴展程序IS,它將獲取sensitiveinfo變量中的信息並執行其操作。

我的問題是,可以在書籤調用擴展的方法來傳遞敏感信息(如果有的話,怎麼樣),也可以擴展捕獲JavaScript時被調用的書籤?

Bookmarklet和Firefox擴展如何通信?

p.s.解決這種情況的另一種方法是讓我的主應用程序啓動Firefox並使用套接字與擴展進行通信,但我不願意這樣做,因爲多年來我遇到了太多問題,因爲用戶使用瘋狂防火牆阻止套接字通訊。如果可能的話,我想盡一切辦法避免套接字。

回答

1

據我所知,書籤工具不能使用Chrome瀏覽器文件(擴展名)。

1

小書籤在當前文件,這是幾乎總是一個內容文件的範圍執行。但是,如果你是在通過命令行傳遞它,它似乎工作:

/Applications/Namoroka.app/Contents/MacOS/firefox-bin javascript:alert\(Components\)

訪問Components如果不允許它會拋出,但警報顯示正確的對象。

+0

儘管您可以訪問組件對象,但它看起來像試圖訪問該對象上的任何有用的方法/屬性,例如類或QueryInterface()會拒絕您的權限。所以我想這是不可能的。 – mhenry1384 2009-08-19 15:31:05

1

你可以使用unsafeWindow注入一個全球性的。您可以添加一個純屬性,以便您的小書籤只需檢測全局是否已定義,但您應該知道,據我所知,無法禁止非書籤小節中的網站同時嗅探對於同樣的全球(因爲它可能是一些網站可以檢測他們是否使用擴展的隱私問題)。我已經在我自己的插件中進行了確認,該插件以類似於下面的方式注入了全局插件,它可以在小書籤和常規站點上下文中工作。

如果您註冊一個nsIObserver,例如,其中content-document-global-created爲主題,然後解開了subject,你可以注入全局(見this如果你需要注入一些更復雜的像與方法的對象)。

下面是一些(未經測試)代碼應該做的伎倆:

var observerService = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService); 
observerService.addObserver({observe: function (subject, topic, data) { 

    var unsafeWindow = XPCNativeWrapper.unwrap(subject); 
    unsafeWindow.myGlobal = true; 

}}, 'content-document-global-created', false); 

thisthis如果你想在一個SDK的顯然更簡單的方式附加(不知道SDK postMessage通信是否會工作作爲替代方案,但顯然同樣的擔憂是,這也會暴露給非書籤上下文(即常規網站)。

+0

我喜歡這篇文章感謝分享Brett,但爲什麼'''content-document-global-created'''而不是''document-element-inserted'''觀察主題? – Noitidart 2014-03-04 05:36:49

+0

沒理由 - 也許那會更好... – 2014-03-04 06:29:57

+0

啊。你能幫我理解它在做什麼,比如什麼能讓它變得更好?你知道content-document-global-created的主題是什麼嗎?它究竟做了什麼?在執行腳本之前是否設置了JavaScript?當沒有文檔元素插入的時候,你甚至不能在那個時候訪問dom。如果你需要插入JavaScript爲什麼使用觀察者?爲什麼不去'''gBrowser.contentWindow.wrappedJSObject.myGlobal = true'''? – Noitidart 2014-03-04 06:37:54