美文网首页
iframe里面的元素点击问题

iframe里面的元素点击问题

作者: 苏叶的小城堡 | 来源:发表于2018-07-12 17:54 被阅读0次

import React, { Component } from 'react';

export class Iframe extends Component {

  constructor(props) {

    super(props);

    this.state = {

      display: 'block',

      height: 'auto'

    }

    this.offsetX = 0;

    this.offsetY = 0;

  }

  componentDidMount() {

    const iframe = document.getElementById(`a`);

    let interCount = 0;

    fetch(this.props.url).then((response) => {

      return response.text();

    }).then((data) => {

      iframe.contentWindow.document.open("text/html", "replace");

      iframe.contentWindow.document.write(data);

      iframe.contentWindow.document.close();

      this.inter = setInterval(() => {

        const height = parseInt(iframe.style.height, 10);

        const iframeClientHeight = iframe.contentWindow.document.documentElement.clientHeight;

        if (height != iframeClientHeight) {

          iframe.style.height = iframeClientHeight + 'px';

        } else {

          if (interCount > 5) {

            interCount = 0;

            clearInterval(this.inter);

          }

        }

        interCount++;

      }, 200);

    })

  }

  handleClick = (event) => {

    console.log('event=', event)

    const iframe = event.target.parentNode.querySelector('iframe');

    const iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

    const {x, y} = iframe.getBoundingClientRect();

    console.log('x=',x,'y=',y)

    const clickElement = iframeDoc.elementFromPoint(this.offsetX - x, this.offsetY - y);

    const newEvent = iframeDoc.createEvent('HTMLEvents');

    newEvent.initEvent('click', true, true);

    clickElement && clickElement.dispatchEvent(newEvent);

  }

  handleMoveStart = (event) => {

    console.log('event=', event)

    this.offsetX = event.pageX || 0;

    this.offsetY = event.pageY || 0;

  }

  render() {

    return (

       <div

          onMouseMove={this.handleMoveStart}

          onClick={this.handleClick}

          style={{

            position: 'absolute',

            top: 0,

            left: 0,

            right: 0,

            bottom: 0,

            zIndex: 2

          }}

        >

</div>

<iframe

          id={`a`}

          src={"about:blank"}

          scrolling={"no"}

          style={{

            border: 'none',

            width: 260,

            position: 'absolute',

            left: 0,

            top: 0,

            display: this.state.display,

            height: this.state.height,

          }}

        />

  );

  }

}

相关文章

  • iframe里面的元素点击问题

    import React, { Component } from 'react'; export class If...

  • 根据 iframe 内容设置高度

    iframe.contentDocument可以获取到 iframe 里面的 document 元素,然后获取高度...

  • 谷歌浏览器跨域--disable-web-security无效解

    问题:网页含不同域名的iframe、Chrome不允许iframe跨域、需要禁用浏览器的同源策略来拿到里面的元素,...

  • JQuery--新增动态元素点击事件失效

    问题:在一个点击事件里,动态添加的元素,注册的点击事件无效。 看下面的代码: 在一个点击事件里,动态地添加新的元素...

  • 使用iframe和deeplink进行调端

    主要方式为创建页面隐藏的iframe,将iframe append到页面元素下,将iframe的src指向页面的链...

  • JS中Iframe之间传值的方法

    1. 在iframe子页面中获取父页面的元素: 2. 在父页面中获取iframe子页面中的元素:

  • iframe 窗体相互调用

    1、iframe 窗体相互调用 (1)在使用iframe的页面时,要操作这个iframe里面的DOM元素可以用:c...

  • iframe页面相互调用方法

    关键词:iframe,跨域,vue最近的项目中嵌入了外部的iframe,想跨域调用自己页面的方法,点击iframe...

  • 2018-03-05 HTML元素

    1.