在 iframe 中调用点击事件

Posted

技术标签:

【中文标题】在 iframe 中调用点击事件【英文标题】:Call tap event into iframe 【发布时间】:2020-05-19 16:31:33 【问题描述】:

我正面临一个我无法解决的大问题。

我用 react js 开发了一个应用程序(app1)。此应用程序将与 i 框架一起包含在同一域下的另一个应用程序 (app2) 中。 App2 必须访问 iframe 内的对象并在按钮上触发 TAP 事件(无点击)。 Tap事件是jquery mobile的自定义事件,我认为它是在一个无法更改的旧库中使用的。我尝试了各种方式,但我真的不知道如何解决这个问题。 Web 组件可以解决我的问题吗?我可以使用 jquery 和 jquery mobile 创建一个 Web 组件按钮,并包含在反应应用程序中。可以解决吗?否则我认为我必须从头开始用 jquery 编写应用程序。

【问题讨论】:

改用click,或使用触摸事件创建自定义事件。 我不能使用click,因为库使用tap,我不能修改库。有没有办法从外部调用 trigger('tap') 并在 iframte 内部调用 click? 【参考方案1】:

无法完全理解您的问题,tap 只是一个名称,即您可以将其称为“单点触控”或任何您想要的名称。也许您只需要在iframe 中找到那个按钮并添加一个eventListener 即可。

无论如何,如果您在 iframe 中包含 JQM,JQM 将在 750 毫秒内将tap 识别为同一目标上的一系列触摸事件。

这是模拟 JQM tap 的最小存根:

function raiseTap(target) 
  // just only one touch in list is enough
  var tcs = Array(new Touch(
        identifier: Date.now(),
        target: target,
        clientX: 0,
        clientY: 0
      ));

  // emulate a bubbling JQM tap 
  // if needed, add touchmove inbetween
  var events = ["touchstart", "touchend"],
      params = touches: tcs, bubbles: true, changedTouches: tcs;
  for(var i=0, l=events.length; i<l; i++) 
    target.dispatchEvent(new TouchEvent(events[i], params));
  


// find the target
var iframe = document.getElementById("iframe"),
    doc = iframe.contentDocument || iframe.contentWindow.document,
    btn = doc.getElementById("button");

raiseTap(btn);

【讨论】:

【参考方案2】:

https://gist.github.com/jaydson/1780598

var myConfObj = 
  iframeMouseOver : false

window.addEventListener('blur',function()
  if(myConfObj.iframeMouseOver)
    console.log('Wow! Iframe Click!');
  
);

document.getElementById('YOUR_CONTAINER_ID').addEventListener('mouseover',function()
   myConfObj.iframeMouseOver = true;
);
document.getElementById('YOUR_CONTAINER_ID').addEventListener('mouseout',function()
    myConfObj.iframeMouseOver = false;
);

【讨论】:

触摸屏没有“mouseover”、“mouseout”

以上是关于在 iframe 中调用点击事件的主要内容,如果未能解决你的问题,请参考以下文章

js中监听iframe点击事件

iframe 存在时整个页面的点击事件

jq 在iframe中点击按钮,父元素触发事件

iframe 对象的点击事件不起作用

ASP.NET中 iframe 点击里面的连接在iframe外的整个网页打开

将点击事件添加到 iframe