同源策略影响,在前端是没有办法实现的,如果可以随便操作子页面的元素,那对于iframe里面的页面岂不是很危险 如果真的要操作iframe里面的元素,可以尝试用nginx代理来实现 方法一 把你的页面配置和代理转发的配置都写在一个server里面,区分不同location,这样他们的域名都是一样的,不存在跨域问题,这样配置的话,要调整好代理页面的静态问题的访问路径,例子就不给出了 方法二 写两个server, server1假定域名为aaa.xxx.com, 用作代理,返回的时候插入一段 js 代码修改domain=xxx.com, server2假定域名为bbb.xxx.com, 用作你的页面,在页面前面设置domain=xxx.com。 下面给个例子,aaa.xxx.com代理www.qq.com,bbb.xxx.com的iframe引用aaa.xxx.com, 并获取iframe的元素 首先是nginx的server配置 server { listen 80; server_name aaa.xxx.com; location / { proxy_pass https://www.qq.com/; proxy_set_header Host www.qq.com; proxy_set_header X-Forwarded-For $remote_addr; # 禁用压缩,否则替换不生效(注意:禁用压缩会带来流量上涨) proxy_set_header Accept-Encoding ''; # 插入 JS 代码,编译的时候要增加 --with-http_sub_module 参数 sub_filter '</head>' '</head><script>document.domain = \'xxx.com\';</script>'; sub_filter_once off; } } server { listen 80; server_name bbb.xxx.com; root /home/www/bbb.xxx.com; location / { } } 然后写一个测试代码/home/www/bbb.xxx.com/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <iframe style="width: 100%;height: 100%" id="iframe" src="http://aaa.xxx.com"></iframe> </body> <script> document.domain = 'xxx.com'; var iframe = document.getElementById('iframe'); iframe.onload = function(){ // 获取 iframe 中 id 为 sosobar 元素 console.log('iframe', iframe.contentWindow.document.getElementById('sosobar')); } </script> </html> 启动Nginx, 访问bbb.xxx.com查看结果 可以看到,iframe已经实现跨域了,不过这样做,有些问题还是不能忽略的 https问题 站点有检测代码 通过独立域名加载的JS、CSS、png,可能有跨域或者权限问题 更改了domain造成某些资源无法获取 ps: 如果有好的方案欢迎分享
同源策略影响,在前端是没有办法实现的,如果可以随便操作子页面的元素,那对于
iframe
里面的页面岂不是很危险如果真的要操作
iframe
里面的元素,可以尝试用nginx
代理来实现方法一
把你的页面配置和代理转发的配置都写在一个
server
里面,区分不同location
,这样他们的域名都是一样的,不存在跨域问题,这样配置的话,要调整好代理页面的静态问题的访问路径,例子就不给出了方法二
写两个
server
,server1
假定域名为aaa.xxx.com
, 用作代理,返回的时候插入一段 js 代码修改domain=xxx.com
,server2
假定域名为bbb.xxx.com
, 用作你的页面,在页面前面设置domain=xxx.com
。下面给个例子,
aaa.xxx.com
代理www.qq.com
,bbb.xxx.com
的iframe
引用aaa.xxx.com
, 并获取iframe
的元素首先是
nginx
的server
配置然后写一个测试代码
/home/www/bbb.xxx.com/index.html
启动
Nginx
, 访问bbb.xxx.com
查看结果可以看到,
iframe
已经实现跨域了,不过这样做,有些问题还是不能忽略的https
问题JS
、CSS
、png
,可能有跨域或者权限问题domain
造成某些资源无法获取ps: 如果有好的方案欢迎分享