用iframe获取第三方网页, 怎样在点击iframe里面的元素时获取到元素的信息

我想在随机点击iframe里面的元素时获取点击的元素信息, 可以实现吗??

可以通过给 iframe 添加一个 load 事件监听器,等待 iframe 加载完成后再获取其内部元素。然后,可以为 iframe 内部的元素添加事件监听器,当用户点击这些元素时,通过 window.parent 对象将事件信息传递给包含 iframe 的页面。

以下是一个示例代码,假设你有一个包含 iframe 的页面和一个 iframe 内部的按钮:

在包含 iframe 的页面中,添加以下代码:

<template>
  <div>
    <iframe src="https://example.com" @load="onIFrameLoad"></iframe>
  </div>
</template>

<script>
export default {
  methods: {
    onIFrameLoad() {
      const iframe = this.$el.querySelector('iframe')
      const iframeDocument = iframe.contentDocument || iframe.contentWindow.document
      const iframeButton = iframeDocument.querySelector('button')
      iframeButton.addEventListener('click', this.onIFrameButtonClick)
    },

    onIFrameButtonClick(event) {
      const data = {
        tagName: event.target.tagName,
        textContent: event.target.textContent,
        href: event.target.href,
        // 其他属性
      }
      console.log('点击了 iframe 内部的按钮:', data)
    }
  }
}
</script>

iframe 内部的页面中,添加以下代码:

<button>点击我</button>

<script>
const iframeButton = document.querySelector('button')
iframeButton.addEventListener('click', function(event) {
  event.preventDefault()
  window.parent.postMessage({
    type: 'iframeButtonClick',
    target: event.target,
    // 其他属性
  }, '*')
})
</script>

这里使用 window.parent.postMessage 方法将事件信息发送到包含 iframe 的页面。在包含 iframe 的页面中,可以通过添加一个 message 事件监听器来接收这些信息:

<template>
  <div>
    <iframe src="https://example.com" @load="onIFrameLoad"></iframe>
  </div>
</template>

<script>
export default {
  methods: {
    onIFrameLoad() {
      const iframe = this.$el.querySelector('iframe')
      window.addEventListener('message', this.onIFrameMessage)
      iframe.contentWindow.postMessage('ready', '*')
    },

    onIFrameMessage(event) {
      if (event.data.type === 'iframeButtonClick') {
        console.log('点击了 iframe 内部的按钮:', event.data)
      }
    }
  }
}
</script>

这里使用 window.addEventListener('message', this.onIFrameMessage) 方法添加一个 message 事件监听器,然后在 onIFrameLoad 方法中使用 iframe.contentWindow.postMessage('ready', '*') 方法向 iframe 发送一个准备完成的消息。当 iframe 内部的按钮被点击时,会触发 message 事件,从而执行 onIFrameMessage 方法,并在控制台输出事件信息。

实现不了

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7796379
  • 这篇博客你也可以参考下:如何修改iframe里面元素样式
  • 除此之外, 这篇博客: iframe解决跳转登录界面问题中的 iframe解决跳转登录界面问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 前端开发中难免会遇到需要通过iframe嵌入其他界面的需求。这时候如果被嵌入的页面需要登录获取权限,会出现iframe内出现登录页的情况。一般都会要求做到无感知登录。具体如何实现,视情况而定,大致如下:

    • 同源环境下,可提前进行登录请求,在localstorage、cookie、session存储token、userId等信息后,进行iframe访问。
    • 跨域时较为复杂,需要同时修改iframe内外部两个系统,本文主要是解决这种情况
  • 您还可以看一下 大壮老师的HTML、CSS零基础WEB开发快速入门视频教程课程中的 HTML5支持的 iframe小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    如何通过iframe获取第三方网页的元素信息?

    要通过iframe来获取第三方网页的元素信息,可以采用以下方法:

    1. 首先,将要嵌入的第三方网页链接放入iframe的src属性中,如下所示:
    <iframe src="https://www.example.com" id="myIframe"></iframe>
    
    1. 使用JavaScript获取iframe元素,并通过contentWindow属性访问内部网页的Window对象:
    var iframe = document.getElementById('myIframe');
    var iframeWindow = iframe.contentWindow;
    
    1. 现在,你可以使用iframeWindow来访问内部网页的DOM元素,例如通过getElementById获取元素,或者使用querySelector选择元素:
    var targetElement = iframeWindow.document.getElementById('targetElementId');
    
    1. 你可以通过元素的属性或方法获取相关信息,比如元素的innerHTML属性获取内部HTML内容,或者使用textContent获取文本内容:
    var elementHTML = targetElement.innerHTML;
    var elementText = targetElement.textContent;
    
    1. 若需要在iframe内的任意元素点击时获取相关信息,可以通过在内部网页中添加点击事件监听器来实现。在内部网页的JavaScript代码中,使用addEventListener方法添加点击事件监听器,并在事件处理程序中获取目标元素的信息:
    iframeWindow.document.addEventListener('click', function(event) {
      var clickedElement = event.target;
      console.log(clickedElement);
    });
    

    这样,当iframe内的任意元素被点击时,都会在控制台中打印出目标元素的信息。

    请注意,由于跨域限制,只有当iframe嵌入的第三方网页与主页处于同一个域或具有正确的跨域策略时,才能够正常获取iframe内部网页的元素信息。否则,将会出现安全错误。