将clicked元素传递给Firefox中的上下文菜单操作

时间:2014-03-24 22:33:38

标签: javascript popup firefox-addon contextmenu

我正在尝试编写一个简单的扩展,它会带一个你右键单击的链接,重新格式化url并在外部应用程序中启动它。我有所有的工作都有一个例外。

我正在使用“popupshowing”监听器来推断右键单击的元素是否为链接,并分别在上下文菜单中显示或隐藏“启动”命令。我的叠加代码如下所示:

<menupopup id="contentAreaContextMenu">
  <menuitem id="LinkOpener" label="LAUNCH" oncommand="LaunchIt(document.popupNode);" />
</menupopup>

像魅力一样工作,但根据文档,document.popupNode正在逐步淘汰,我应该使用menupopup的triggerNode。但是,我不能简单地将它传递给内联“oncommand”处理程序。

最好的方法是什么?我现在唯一能想到的就是去处理“popupshowing”事件的函数,用前面的元素引用删除旧的“命令”监听器并添加一个带有新引用的新命令,但感觉可能有一个更好的方法来做到这一点。 任何帮助将不胜感激。 谢谢! 卢卡

3 个答案:

答案 0 :(得分:1)

解决:因为menuitem是menupopup的孩子,我可以这样做:

<menuitem oncommand="myFunc(this.parentNode.triggerNode);">

答案 1 :(得分:0)

你的函数LaunchIt传递了event参数,并从这个get event.relatedTarget或者我忘记但是event.Sometarget与document.popupNode相同。要探索它,在你的launchIt函数中输入console.log(event)然后查看浏览器控制台,然后单击该链接,它将打开变量查看器,在那里探索目标。

一定要分享你发现的东西,我不记得我是怎么做的,所以这将是一个很好的提醒

答案 2 :(得分:0)

我一直在寻找如何获得使用firefox(35.0)上下文菜单扩展菜单项的DOM元素,以及上述技术对我有用。我通过了

<menuitem oncommand="myFunc(this.parentNode.triggerNode);">

并使用

访问DOM元素

function(triggerNode) { window.alert("triggerNode.tagName=" + triggerNode.tagName)

相关问题