[英]Firefox extension: JavaScript file included via script tag is not working
[英]Controlling a Firefox Extension via Javascript
是否可以使用javascript控制覆蓋firefox擴展? 我已經提取了擴展的內容,並確定了我需要運行的函數/方法,但是它們在控制台的范圍內是不可訪問的。
提前感謝任何想法。
是的,在適當的情況下,可以與其他附加組件進行交互。
我的測試用例是com.googlecode.sqlitemanager.openInOwnWindow()
,它是SqliteManager
插件的一部分。
在較新的版本中(我使用Nightly),有瀏覽器工具箱 。 使用它就像打開工具箱並在控制台中執行com.googlecode.sqlitemanager.openInOwnWindow()
一樣簡單。
您可以使用瀏覽器控制台(或任何支持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()
再次, 啟用chrome調試 。 然后打開Scratchpad並在“ 環境”菜單中切換到Chrome 。 現在在我們的Scratchpad中執行com.googlecode.sqlitemanager.openInOwnWindow()
將會起作用。
您當然可以編寫自己的疊加插件。
作為最后的手段,修補附加組件本身。
自舉/ 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中的情況發生了巨大變化。這是訪問它的新方法。
var XPIScope = Cu.import('resource://gre/modules/addons/XPIProvider.jsm');
var addonid = 'Profilist@jetpack';
var scope = XPIScope.XPIProvider.activeAddons.get(addonid).bootstrapScope
更新今天的方法
通常你會這樣做:
如果我想進入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.