【问题标题】:counting clicks on iframe计算 iframe 的点击次数
【发布时间】:2015-08-26 21:44:49
【问题描述】:

jQuery(document).ready(function (e) {
    focus();
    var listener = addEventListener('blur', function() {
        if(document.activeElement === document.getElementById('my_iFrame')) {
            console.log("clicked!");
        }
        removeEventListener(listener);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<iframe src="http://example.com" id="my_iFrame"></iframe>

此代码仅计算一次点击。如何计算更多点击次数?

谢谢!

【问题讨论】:

  • "clicked" 在我的控制台中打印了多次
  • 这似乎按您的意愿工作。你确定你在两次点击之间点击了iframe之外的地方吗?为了触发blur 处理程序,您需要首先将焦点恢复到父文档。
  • Add click event to iframe 的可能重复项

标签: javascript jquery iframe addeventlistener


【解决方案1】:

@benjarwar 在他的两个 cmets 中都是正确的,但是我认为以下解决方案比其他帖子中建议的解决方案更优雅,但是作为一个超过 1 年不活跃的帖子,我将在此处发布解决方案。

只要您可以访问 iframe 和父框架代码,这将适用于跨域。

假设您将在 parent 和 iframe 中使用 jQuery!

在您添加的 iframe 中:

$("html").on("click",function(){
parent.postMessage("click", "*");
});

在您添加的父级中:

window.addEventListener("message", function(event) { 
 if (event.data=="click") 
 //above if only added to be sure you are not getting some other messages post to you parent page.
   { console.log("clicked!"); }
});

【讨论】:

  • 我在 iframe 中没有访问权限。 iframe 包含例如:bing.com、example.com、...。
  • 不幸的是,如果 iframe 不在同一个域中,或者您无权访问它的源,则无法与它进行交互。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 2014-08-14
  • 2021-12-12
相关资源
最近更新 更多