移除iframe中PHP网站头部失败,请求排查问题原因
问题根源及解决方案
你的代码失效主要有3个核心问题:
- 跨域同源策略限制:iframe加载的
erfan.ir和你的主域名不属于同一源(协议、域名、端口任一不同即为跨域),浏览器的安全机制会完全阻止父页面操作iframe内的DOM元素,这是最根本的原因。 - 选择器使用错误:你用
document.getElementById(".TopHeader")是错误写法——getElementById接收的是ID名称,不能加.;如果目标元素的类名为TopHeader,应该用document.getElementsByClassName("TopHeader"),或者jQuery的$(".TopHeader")。 - 代码执行上下文不对:你的脚本在父页面运行,判断
window.self !== window.top是检测当前页面是否被嵌入iframe,但你要操作的是iframe内部的头部元素,这段代码根本没去访问iframe的内容容器。
可行解决思路
如果要实现隐藏iframe内的头部,只有两种合法途径:
- 若你拥有
erfan.ir网站的权限,在该网站的代码里加入判断:当页面被嵌入iframe时自动隐藏头部。比如在目标PHP页面的脚本里写:
(function() { if (window.self !== window.top) { document.querySelector(".TopHeader").style.display = "none"; } })();
- 使用同域名代理页面:自己搭建一个同域名的代理脚本,请求目标页面并移除头部后,再用iframe加载这个代理页面(注意需遵守目标网站的robots协议和版权规则)。
内容的提问来源于stack exchange,提问作者Sheykh
相关产品推荐
相关产品推荐

