我想在随机点击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
方法,并在控制台输出事件信息。
实现不了
前端开发中难免会遇到需要通过iframe嵌入其他界面的需求。这时候如果被嵌入的页面需要登录获取权限,会出现iframe内出现登录页的情况。一般都会要求做到无感知登录。具体如何实现,视情况而定,大致如下:
要通过iframe来获取第三方网页的元素信息,可以采用以下方法:
<iframe src="https://www.example.com" id="myIframe"></iframe>
var iframe = document.getElementById('myIframe');
var iframeWindow = iframe.contentWindow;
var targetElement = iframeWindow.document.getElementById('targetElementId');
var elementHTML = targetElement.innerHTML;
var elementText = targetElement.textContent;
iframeWindow.document.addEventListener('click', function(event) {
var clickedElement = event.target;
console.log(clickedElement);
});
这样,当iframe内的任意元素被点击时,都会在控制台中打印出目标元素的信息。
请注意,由于跨域限制,只有当iframe嵌入的第三方网页与主页处于同一个域或具有正确的跨域策略时,才能够正常获取iframe内部网页的元素信息。否则,将会出现安全错误。