我们经常会有父页面与iframe页面的操作,比如
这个iframe里面的内容是js写的。如以下代码
var iframe = document.getElementById("iframe"),
doc = iframe.contentWindow.document;
doc.open();
doc.write("---------something------");
doc.close();以上代码在大多数情况下是对的。但有种情况,即父页面显式的写了document.domain = "xxx";
在ie系列(IE10没试过)会出现没权限的错误。 而在firefox, chrome都没问题.
立即学习“Java免费学习笔记(深入)”;
这是为什么呢?这是ie的一个bug, 即父页没有显式的设置document.domain时,iframe会默认document.domain与父页面一致,即都是
location.host,父子页面是可以进行通信,即文章头的例子, 但当父页面显式的设置了document.domain="", iframe里面的页面必须也显式的设置document.domain="xxx",否则是
没有权限得到iframe.contentWindow.document的, 即也没办法去动态写内容,其实也可以让iframe指向一个特定的页面,这个页面显式的设置document.domain="xxx",再通过文章开头的方
的方式来写,但问题是我的父页面有很多这样的iframe,个数是未知的(都是广告位),所以也不能通过特定页面。
这样问题就来了,在这种情况下,我们貌似没有办法
1. 父页面设置了并且必须会显式的设置document.domain
2.iframe页面的内容需要js动态生成。
3.没有机会为iframe设置src。
但上面3个条件都满足时,我们可以通过伪协议来解决此类的问题。
通过这种方式可以显式的设置iframe的document.domain与父页面一致。
这样写了后,的确实现了动态写iframe内容的需求,但这个页面会单独弹出来,像window.open();
这是为什么呢? 这也是ie系列的bug ,即父页面有
但父页面的
这样就解决了此问题。
虽然伪协议可以解决此问题,但也有些风险,如果不到万不得已,也别随便用这种方式。
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号