Coo*_*ama 5 javascript firefox watir firefox-addon
是否可以使用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()
再次,启用chrome调试.然后打开Scratchpad并在" 环境"菜单中切换到Chrome.现在在我们的Scratchpad中执行将起作用.com.googlecode.sqlitemanager.openInOwnWindow()
您当然可以编写自己的叠加插件.
作为最后的手段,修补附加组件本身.
Bootstrapped/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.
Run Code Online (Sandbox Code Playgroud)
在网络内容中:
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);
Run Code Online (Sandbox Code Playgroud)