簡體   English   中英

通過Javascript控制Firefox擴展

[英]Controlling a Firefox Extension via Javascript

是否可以使用javascript控制覆蓋firefox擴展? 我已經提取了擴展的內容,並確定了我需要運行的函數/方法,但是它們在控制台的范圍內是不可訪問的。

提前感謝任何想法。

是的,在適當的情況下,可以與其他附加組件進行交互。

我的測試用例是com.googlecode.sqlitemanager.openInOwnWindow() ,它是SqliteManager插件的一部分。

  1. 在較新的版本中(我使用Nightly),有瀏覽器工具箱 使用它就像打開工具箱並在控制台中執行com.googlecode.sqlitemanager.openInOwnWindow()一樣簡單。

  2. 您可以使用瀏覽器控制台(或任何支持Chrome的WebDev控制台),例如“about:newtab”的控制台。 但是你需要一些樣板代碼才能找到瀏覽器窗口。 所以這里是你可以在那里執行的代碼: var bwin = Services.wm.getMostRecentWindow("navigator:browser"); bwin.com.googlecode.sqlitemanager.openInOwnWindow() var bwin = Services.wm.getMostRecentWindow("navigator:browser"); bwin.com.googlecode.sqlitemanager.openInOwnWindow()

  3. 再次, 啟用chrome調試 然后打開Scratchpad並在“ 環境”菜單中切換到Chrome 現在在我們的Scratchpad中執行com.googlecode.sqlitemanager.openInOwnWindow()將會起作用。

  4. 您當然可以編寫自己的疊加插件。

  5. 作為最后的手段,修補附加組件本身。

  6. 自舉/ SDK插件:您可以加載XPIProvider.jsm (最近改變了位置),並獲得了自舉范圍(運行環境bootstrap.js通過) XPIProvider.bootstrapScopes[addonID]並從那里(使用什么是在引導范圍內,例如SDK加載程序)。

現在關於正確的情況 :是否以及如何與某個加載項進行交互取決於加載項。 加載項可能在其疊加層中具有全局符號,因此也可能在瀏覽器窗口中具有全局符號,例如在我使用的示例中。 或者可以使用(在某種程度上)JS代碼模塊。 或者有他們自己的自定義加載器的東西(例如AdBlock Plus有他們自己的require()類似的東西,SDK附加組件有自己的加載器,這不是很容易滲透)...

既然你的問題很不明確,我會把它留在這里。

問題提問者編輯:這是正確的,但是我想我最后會添加一個我最終使用的代碼示例,實際上是直接從mozilla的開發者網絡網站獲取的:

在我的chrome js中:

var myExtension = {
  myListener: function(evt) {
   IprPreferences.setFreshIpStatus(true); // replace with whatever you want to 'fire' in the extension
  }
}

document.addEventListener("MyExtensionEvent", function(e) { myExtension.myListener(e); }, false, true);
// The last value is a Mozilla-specific value to indicate untrusted content is allowed to trigger the event.

在網絡內容中:

var element = document.createElement("MyExtensionDataElement");
element.setAttribute("attribute1", "foobar");
element.setAttribute("attribute2", "hello world");
document.documentElement.appendChild(element);

var evt = document.createEvent("Events");
evt.initEvent("MyExtensionEvent", true, false);
element.dispatchEvent(evt);

Firefox 47及更新版本

Firefox 47中的情況發生了巨大變化。這是訪問它的新方法。

var XPIScope = Cu.import('resource://gre/modules/addons/XPIProvider.jsm');
var addonid = 'Profilist@jetpack';
var scope = XPIScope.XPIProvider.activeAddons.get(addonid).bootstrapScope

<Firefox 47的舊方法

更新今天的方法

通常你會這樣做:

如果我想進入AdBlocks范圍,我會檢查AdBlock id,它是{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}所以我會去:

var XPIScope = Cu.import('resource://gre/modules/addons/XPIProvider.jsm');
var adblockScope = XPIScope.XPIProvider.bootstrapScopes['{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}'];

你現在可以在那里挖掘任何東西。

另一個例子,我有一個安裝了ID為NativeShot@jetpack的插件

我會像這樣點擊它:

var XPIScope = Cu.import('resource://gre/modules/addons/XPIProvider.jsm');
var nativeshotScope = XPIScope.XPIProvider.bootstrapScopes['NativeShot@jetpack'];

如果你做console.log(nativeshotScope)你會看到里面的一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM