我想编写一个可以实时获取地址栏内容的Firefox插件,例如,这个插件会将每个“a”更改为“A”,就像用户按下“a”一样。 问题是我在Javascript中找不到任何方法可以做到这一点,有没有办法(实时获取地址栏内容)?
答案 0 :(得分:2)
你实际上并没有说你被困在哪一点。
首先,您需要创建一个覆盖主浏览器窗口(browser.xul)的简单扩展。 Building an Extension - MDC,URL Fixer - good example extension
然后,您需要将一个事件监听器附加到URL栏(关键字:addEventListener,events)。你可能想听“keypress”,虽然你应该阅读有关各种活动的文档。您可以搜索Firefox或其他扩展程序的源代码,以查看它们将侦听器附加到哪个元素。您可以在DOM检查器扩展中检查DOM树(以查看可用的元素)。
在事件监听器中,您应该检查并更新位置栏中的URL(gURLBar.value,IIRC)。您还必须采取措施保护插入位置。
答案 1 :(得分:1)
Firefox扩展程序可以绝对控制地址栏。尝试查看omnibar扩展程序的源代码。 (要获取源代码,请安装扩展,然后浏览Firefox配置文件文件夹)
答案 2 :(得分:0)
您可能需要一个监听器来跟踪urlbar更改,例如:
gBrowser.addProgressListener(myExt_urlBarListener,
Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
此命令可以更新urlbar:
document.getElementById(comVar.URLBAR_ID.gui).value
您需要使用以上代码阅读网址,使用Javascript检测每次击键。如果您需要更多详细信息,请提取并查看firefox的其中一个恶搞插件中的代码。
答案 3 :(得分:-1)
如果您只是尝试修改地址栏的文本而不重定向用户,则无法进行此操作。
每当修改位置对象的属性时,将使用URL加载文档,就像使用修改后的URL调用window.location.assign()一样。
如果浏览器允许您使用javascript更改地址栏中的字符串而不重定向用户,则很容易发生网上诱骗。那不是你想要做的吗?
答案 4 :(得分:-1)
在JavaScript中,window.location.href
会为您提供值,您可以在onkeyup上查看它,但是AFAIK,如果不按照您设置的值加载页面,则无法回写到位置字段。我的意思是,如果您执行以下操作,它将重新加载页面:
window.location.href = window.location.href.toLowerCase();
我不熟悉Firefox扩展的工作方式,但也许有一种更“原生”的方法可以做到这一点?