代码之家  ›  专栏  ›  技术社区  ›  Edwin

从overlay div获取鼠标事件(单击)

  •  0
  • Edwin  · 技术社区  · 7 年前

    下面的代码有一个不可见的div,它在iframe上。我想获取在iframe上执行的所有鼠标事件(现在让我们听听 click ). 但如果我设置 pointer-events none ,和 点击 未调用侦听器。

    我也曾尝试过,但没有成功: Add click event to iframe

    我的目标是监听iframe中发生的任何事件,并在主窗口中弹出一条消息:“iframe中发生了一些事件”。我不想知道更多关于iframe中事件的信息,只想知道它们是在哪里触发的。

    注:在 src iframe的是一个不同的域作为窗口。

    如果可能的话有什么想法吗?

    jQuery(function($) { // DOM ready
    
      $('#overlay').on('click', function(e) {
        alert('test');
      });
    
    });
    #frame {
      z-index: 1;
      width: 600px;
      height: 400px;
      position: absolute;
      pointer-events: all;
    }
    
    #overlay {
      width: 605px;
      height: 405px;
      opacity: 0;
      background: red;
      z-index: 9999;
      position: absolute;
      pointer-events: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <iframe id="frame" src="http://www.guguncube.com">
    </iframe>
    <div id="overlay">
    </div>

    这是 http://jsfiddle.net/cxbmu/348/

    3 回复  |  直到 7 年前
        1
  •  0
  •   Unmitigated    7 年前

    pointer-events: none 正在阻止单击、悬停、鼠标指针等交互事件,因此不会调用单击事件。

    指针事件:无 :

    元素永远不是鼠标事件的目标;但是,如果这些子体的指针事件设置为其他值,则鼠标事件可能会以其子体元素为目标。在这些情况下,在事件捕获/气泡阶段,鼠标事件将酌情触发此父元素上的事件侦听器,以便它们往返于子元素。

    documentation .

        2
  •  0
  •   SirPilan    7 年前

    var frame = $('#frame').contents(); 只有在同一域或 CORS

    frame.find('body').click(function(event){
       console.log('yaay');
    });
    

    如果不是这样的话,很多网站都很容易受到XSS的攻击。

        3
  •  0
  •   Morteza Fathnia    7 年前

    必须从css中删除指针事件:无:

    <iframe id="frame" src="http://www.guguncube.com">
    </iframe>
    <div id="overlay">
    </div>
    
    #frame {
      z-index: 1;
      width: 600px;
      height: 400px;
      position: absolute;
      pointer-events: all;
    }
    
    #overlay {
      width: 605px;
      height: 405px;
      opacity: 0;
      background: red;
      z-index: 9999;
      position: absolute;
    }
    
    $(document).ready(function(){
      $('#overlay').on('click', function(e) {
        alert('test');
      });
    })