防止网页被嵌入框架的代码

1/2/2021 javascript

限制所有人使用并重定向至原网址

<script type="text/javascript">
    if (window!=top) // 判断当前的window对象是否是top对象 top.location.href =
    window.location.href; // 如果不是,将top对象的网址自动导向被嵌入网页的网址
</script>
1
2
3
4

使用该代码后所有人只要把你的网页嵌入框架,就会重定向到你的网页网址

# 只允许自己使用的域名嵌入

try {
    top.location.hostname;
} catch (e) {
    top.location.href = window.location.href;
}
1
2
3
4
5

在 IE 和火狐等浏览器上 top.location.hostname 会报错,这种错误叫做"没有权限"。进一步说,浏览器甚至不允许你查看 top.location.hostname,跨域情况下,一看到这个对象,就直接报错。

所以以上代码判断如果存在跨域报错,即表示嵌入网页域名不是属于自己的,于是重定向至原网页

存在一个特殊情况是在跨域情况下,Chrome 对 top.location.hostname 不报错!

try {
    top.location.hostname;

    if (top.location.hostname != window.location.hostname) {
        top.location.href = window.location.href;
    }
} catch (e) {
    top.location.href = window.location.href;
}
1
2
3
4
5
6
7
8
9

以上是完善 Chrome 存在特殊情况的代码。使用以上代码其他域名一律无法将你的网页嵌入框架