大家好,

我的一个项目有问题。我目前正在开发Google Chrome浏览器的工具栏。这个概念是我的扩展程序通过在我访问的每个页面中使用一个iframe的内容脚本来插入。在我的打印屏幕上以红色实现。

之后,我创建了另一个iframe,当我单击“菜单”按钮时出现。该iframe看起来像一个dropMenu。在打印屏幕中以橙色显示。

好吧,现在让我解释一下我的问题:

当我单击“ dropMenuButton”时,我将执行以下代码:

$( "#dM1").click( function() {
    dropMenu('dropMenu1', $(this).position().left);
});


为了清楚起见,函数“ dropMenu”将调用我的后台页面(通过消息交换)以显示或隐藏dropMenu,无论该函数是否已被激活。

这是“ dropMenu函数”执行的代码

if(document.getElementById("dropMenu"))
    {
        $("#dropMenu").slideUp(800, function() {
            $(this).remove();
        });
    }
    else
    {
        var body = $('body'),
        MenuURL = chrome.extension.getURL(dropMenuPage + ".html"),
        iframe = $('<iframe id="dropMenu" scrolling="no" src="'+MenuURL+'">');

        body.append(iframe);

        $("#dropMenu").hide().slideDown(800);

        // Shift the menu (Left)
        $("#dropMenu").css({left: marginLeft+'px'});
    }


因此,dropMenuButton上的事件可以正常工作,但我想提供一些诸如.ClickOut事件的改进措施。我想要的是,当有人在dropMenu(橙色)之外单击时,菜单将被隐藏。

我已经尝试了很多东西,但是没有任何效果...

希望有人能帮助我!
提前致谢。

编辑(注入):

我试图注入这样的javascript:

var injectJs = $('<script type=text/javascript>' +
            '$(document).click(function() {' +
                'dropMenu("dropMenu1", 0);' +
        '});');

body.append(injectJs);

injectJs = $('$("#dropMenu").click( function(e) {' +
        'e.stopPropagation();' +
    '});' +
    '</script>');
body.append(injectJs);


但是它似乎没有注入到页面中。它应该在某个地方有问题...

最佳答案

您不能只在文档上添加点击事件吗?然后在实际的下拉菜单(或您不想隐藏下拉菜单的任何其他事件)上,防止任何点击冒泡:

$(document).click(function(){
  // hide drop down clicking anywhere on page:
  $("#dropMenu").slideUp(800, function() {
    $(this).remove();
  });
});

$("#dropMenu").click( function(e) {
  e.stopPropagation(); // prevent click on drop menu from removing the drop down.
});

10-02 17:03