使用数据属性更改 iframe 内元素的 CSS

Posted

技术标签:

【中文标题】使用数据属性更改 iframe 内元素的 CSS【英文标题】:Changing CSS of element inside an iframe using data attribute 【发布时间】:2021-06-18 12:14:52 【问题描述】:

我的 html 文档中有一个 iframe。此iframe 具有数据属性“data-search-id”,即“mainline-top”。如何在 iframe 之外使用 javascript 来更改具有类“base-top”的元素的颜色。我应该使用数据属性还是有其他方法?请注意,我无法将 id 或类添加到 iframe,它是从其他地方加载的。

<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>Page Title</title>

<script src="https://code.jquery.com/jquery-3.6.0.min.js "integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<body>

    <iframe data-search-id="mainline-top">
        
        <style>.base-topcolor: #red;</style>
        
        <div class="base-top">Stuff</div>

    </iframe> 

<script>
     $('.base-top.).css(color, "blue");
</script>

</body>
</html>

【问题讨论】:

iframe 来自另一个域,但我想我可以编辑它,我只需要使用 data 属性访问 iframe var iframe = document.querySelctor("[data-search-id='mainline-top']");或类似的东西? “iframe 来自另一个域”。然后由于浏览器安全限制,您无法使用父页面中的脚本进入其中 【参考方案1】:

您可以在 iframe 中插入样式标签。

<iframe data-search-id="mainline-top" id="myIframe">
        
        <style>.base-topcolor: red;</style>
        
        <div class="base-top">Stuff</div>

    </iframe> 
<style type="text/css" id="mycss">.base-topcolor: blue;</style>
<script type="text/javascript">
    $(function () 
        $('*[data-search-id="mainline-top"]').contents().find("head")[0].appendChild(mycss);
    );
</script>

【讨论】:

完美,如何使用 iframe 的数据属性?我不能给 iframe 一个 ID,否则我会 使用可以使用:$('*[data-search-id="mainline-top"]') 当我在 jsfiddle 中尝试时,它似乎不起作用 如果 iframe 的来源有不同的来源或协议(http://、https://),那么您根本无法使用任何东西访问它。 如果我能让您的示例先运行,那么我可以对其进行测试。有没有办法运行你的代码 sn-p 来尝试一下?当我将其复制/粘贴到 JS fiddle 时,contents().find("head") 部分不起作用。但是做 $('*[data-search-id="mainline-top"]').hide();确实有效

以上是关于使用数据属性更改 iframe 内元素的 CSS的主要内容,如果未能解决你的问题,请参考以下文章

JS:更改 iframe 链接标签内

无法将 iframe 元素从指令传递给 Angular 控制器

javascript_获取iframe框架中元素节点的属性值

使用 jQuery/javascript/css 更改 Flash 视频对象的属性

检测 iframe 内 SPA(单页应用程序)的 URL 更改

iframe 内 Web 元素的 QuerySelector