修改 iframe 中的 CSS 样式

工作中总能遇到 引用别人的页面,就会带来很多问题,比如iframe中的样式不满足我们的需求,这就需要修改iframe中的样式,

下面我们做一个修改 iframe 中样式的 Demo:

知识点:

let test =

    document.getElementById('引用的iframeId').contentWindow.document.getElementById('修改样式的Id');

test.style.width = "200px";

第1步:创建一个setIframeStyle文件夹

第2步:在setIframeStyle文件夹中创建 A.html 和 B.html

    2.1:    A.html文件

<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" />
    <script>
      window.onload = function () {
        var test =
          document.getElementById('frame').contentWindow.document.getElementById('cc');
        test.style.background = "#333";
      }
    </script>
  </head>

  <body>
    <div>
      这是 第一个 网页
    </div>
    <iframe src="2.html" frameborder="0" id="frame" width="100%" height="100%"></iframe>
  </body>

</html>

     2.2:    B.html文件

<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" />
  </head>

  <body>
    <div id="cc">
      这是 2 网页
    </div>
  </body>

</html>

第3步: 打开 vscode 安装 live server 插件

 第4步: 下面的 截图 是 这个 demo 的整体, 对照下 看看 一样不

 第五步: 点击下面截图中箭头指向的图标 运行 A.html

Go Live Control Preview

 iframe 中的 背景变成 灰色了 到了这一步就算成功了, 接着往下看

but ....

不是所有的页面都是引用本地的,如果网络资源,比如百度呢?接下来说说引用网络资源

    1.将A.html中 iframe 的 src 属性 修改为 www.baidu.com

<iframe src="https://www.baidu.com/" frameborder="0" id="frame" width="100%" height="800px"></iframe>

运行 A.html 发现报错了

原因: 浏览器有一个同源策略限制

第一种: 限制就是不能通过 ajax 的方法去请求不同源的文档。

第二种: 限制是不能浏览器中不同域的 iframe 之间是不能进行js的交互操作的。

我们修改下 A.html中 代码 :

<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" />
    <script>
      
    </script>
  </head>

  <body>
    <div>
      这是 第一个 网页
    </div>
    <iframe src="https://www.baidu.com/" frameborder="0" id="frame" width="100%" height="400px"></iframe>
  </body>
  <script>
    window.onload = function () {
        var test =
          document.getElementById('frame').contentWindow//.document.getElementById('cc');
          console.log(test)
        // test.style.background = "#333";
      }
  </script>
</html>

 下面 是 输出 test 的结果

子域 window 几乎没有 有价值东西, document 根本不存在,此问题有两种方式解决

1. 放弃吧老铁, 不同源的东西,是不可进行 js 交互的

2. 利用 postMessage函数,进行子域与父域通信(前提是必须同域)

var frame = document.getElementById('your-frame-id'); 
frame.contentWindow. postMessage (data, '*');

data可以是string,boolean,number,array,object

在iframe子页面
window. addEventListener ('message', function(event) { 
    //event.data获取传过来的数据
});

end...

在Vue修改iframe内部样式,可以通过以下步骤进行操作。首先,你需要在Vue组件添加一个iframe元素,设置其id和src属性。例如,你可以使用以下代码: ```html <iframe id="iframeId" :src="iframeUrl" width="100%" height="100%" frameborder="0" @load="loadFrame"></iframe> ``` 然后,在Vue组件的methods定义一个loadFrame方法,用于在iframe加载完成后进行操作。在loadFrame方法,你可以获取到iframe元素,并操作其内部文档的样式。例如,你可以使用下面的代码: ```javascript methods: { loadFrame() { const iframe = document.getElementById("iframeId"); const body = iframe.contentWindow.document.body; const cssLink = document.createElement("link"); cssLink.href = "/vue项目名称/iframe-css/iframe.css"; cssLink.rel = "stylesheet"; cssLink.type = "text/css"; body.appendChild(cssLink); }, }, ``` 在该方法,通过getElementById方法获取到iframe元素,然后获取到其内部文档的body元素,并创建一个link标签用于引入样式表。你可以设置link标签的href属性为你要引入的样式表的路径,然后将link标签添加到iframe的body元素。这样,当iframe加载完成后,样式表就会被应用到其123 #### 引用[.reference_title] - *1* *2* [vue项目修改iframe嵌入的css样式](https://blog.csdn.net/catascdd/article/details/131281843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [在Vue引入外部css文件修改iframe嵌入页面的样式](https://blog.csdn.net/bin_322/article/details/122173465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gleason.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值