当前位置: 首页 > 知识库问答 >
问题:

前端 - 在vue3项目中 内嵌iframe 通过ref能拿到标签里的内容吗?

章绪
2024-04-29

在vue3项目中 内嵌iframe 通过ref能拿到标签里的内容吗?
大概格式是这样的 <iframe src:'xxx' ref='iframeRef' xxx xxx></iframe> 拿到的ref是<iframe>xxx</iframe> 标签 我想拿到其中一个标签的值 那个标签有id 要通过什么方式拿到呢

iframe.value.contentDocument 拿不到数据 不知道是不是同源策略的问题

共有2个答案

景唯
2024-04-29

在Vue 3项目中,当你通过ref属性来引用一个iframe,你实际上可以获取到iframe元素本身,而不是直接访问其内容。这是因为iframe加载的内容存在于不同的上下文(或称之为不同的“文档”)中,这与包含它的父文档是分开的。

要访问iframe内部的内容,你需要首先确保iframe加载的内容与你的Vue应用遵循同源策略(即,它们的协议、域名和端口号都相同)。如果iframe和你的应用不是同源的,那么出于安全考虑,浏览器的同源策略会阻止你访问iframe内容。

假设iframe和你的Vue应用是同源的,你可以这样访问iframe的内容:

在Vue组件中,使用ref属性给iframe添加一个引用。

<template>  <iframe ref="myIframe" src="your-iframe-source.html"></iframe></template>

在Vue组件的mounted生命周期钩子中,使用这个引用来访问iframe的内容。你可以通过contentWindow属性来访问iframe的窗口对象,然后通过document属性来访问其文档对象。

<script setup>import { ref, onMounted } from 'vue';const myIframe = ref(null);onMounted(() => {  // 确保iframe已经加载完成  myIframe.value.onload = () => {    try {      const iframeDocument = myIframe.value.contentWindow.document;      // 现在你可以访问iframe的内容了,例如:      console.log(iframeDocument.body.innerHTML);    } catch (error) {      console.error("无法访问iframe内容:", error);    }  };});</script>

请注意,即使是同源的情况,也可能因为浏览器的安全策略、iframe的加载状态等因素,导致访问iframe内容时遇到问题。确保在尝试访问内容之前,iframe已经加载完成,这可以通过监听iframe的load事件来实现。

裴俊雅
2024-04-29

vue ref 拿到的是 Dom

从这里开始就和 vue 没关系了

contentDocument 这个 api 就是 dom 自带的,拿不到就是因为跨域了。比如说可以通过domain来解决。

也可以通过 postmessage 方案

 类似资料:
  • 现在实现的效果是ul里面的内容转入到dl当前,但是我想同时将li标签变成dd 类似

  • Locationbox是一个提供类似谷歌地图服务的外部系统。您可以在这里回顾一个示例;

  • 问题内容: 我正在编写一个应用程序,它是Angular和jQuery的一部分。我通过在iFrame中加载jQuery内容来分离它们。 在某个事件(例如,单击ng)时,我需要刷新iFrame。我的控制器包含以下代码: 而iFrame是: 问题答案: 正如Paulo Scardine所说,正确的方法是通过指令,因为您不应该使用控制器来操纵DOM。 这样的事情可以做: 然后可以这样使用: 和:

  • Tags标签 标签: <tags></tags> 作用:进行相关Tags数据调用 格式: <tags action="方法名" 参数="内容"> .. HTML .. </tags> 用法示例: <tags action="lists" tag="$tag" num="4" page="$page" order="updatetime DESC"> .. HTML .. <

  • spf模块扩展标签 标签: <spf></spf> 作用:调用非系统内置标签,例如安装新模块后,例如新模块(Demo)目录下TagLib/DemoTagLib.class.php(类名为DemoTagLib) 用法示例: <spf module="Demo" action="lists"> .. HTML ..</spf> (lists表示类DemoTagLib中一个public方法。) 特别

  • content内容标签 content内容标签:<content></content>作用:内容模型相关标签,可调用栏目,列表等常用信息 用法示例: <content action="lists" catid="$catid" order="id DESC" num="4" page="$page"> .. HTML ..</content> 格式: <content action="方法名"