点击处理程序(非内联)不在同一个域iframe

时间:2018-04-03 00:28:42

标签: javascript jquery google-chrome-extension

我尝试向iframe元素添加点击处理程序(iframe是页面的一部分,不是我添加的,并且是同一个域),但它似乎无法正常工作。如果我将事件更改为' mouseenter',它可以正常工作,但我尝试做的事情更适合用点击完成。根据我的理解,即使元素上已经存在点击方法,我仍然可以添加另一个,它们将按照它们附加的顺序运行。这是否意味着现有的点击处理程序之一以某种方式阻止我的运行,因为mouseenter工作正常,或者这是其他事情发生了吗?我使用的是jQuery 3.2.1。

$(document).ready(function() {
  const INSTRUCTOR_PLACEHOLDER = 'Staff';
  const IFRAME_ID = 'ptifrmtgtframe';
  let iframe = document.getElementById(IFRAME_ID);
  $(iframe).on('load', function () {

    let instructorElementIds = 'span[id ^= "MTG_INSTR$"]';
    //Issue here
    $(iframe.contentDocument.body).on('click', instructorElementIds, function(event) {
      console.log('i run');
    });
  });
});

iframe:https://pastebin.com/qwAmCFJx

完整的html页面(无法在浏览器中加载,因为有一些授权):https://pastebin.com/S4RhJuW8

编辑: 尝试在没有jquery的情况下执行此操作后,我注意到列表表中的任何位置都没有响应我的点击事件,但似乎iframe中的其他任何位置都会响应。表id是我发布到pastebin的html源代码中的ACE_SSR_CLSRSLT_WRK_GROUPBOX1,如果有帮助的话。这是代码:

iframe.contentDocument.addEventListener('click', function(e) {
  console.log('test');
  if(e.target && e.target.nodeName == 'span' && e.target.id.startsWith('MTG_INSTR$')) {
      console.log('hello');
  }
});

0 个答案:

没有答案