你说的这个也是一个方法,不过如果盗链的页面只是显示部分iframe的内容,就不能完全显示一个申明的页面 其实location是一个对象,但如果直接访问这个对象,其实就相当于访问location.href,其实上面直接赋值location不是规范的写法,应该是:top.location.href = "xxx" 我刚刚用以下方法遍历了location的所有属性,发现只有location.href可以写,但不可以读,其他属性都是不能读和写,至于为什么这样,可能就是为了可以把顶层的页面可以跳转吧: try{top.location.host}catch(exp){ for(var o in top.location){ try{top.location[o];alert("属性"+ o +"有读取权限")}catch(exp){alert("属性"+ o +"没有读取权限")} try{top.location[o] = "xxx";alert("属性"+ o +"有赋值权限")}catch(exp){alert("属性"+ o +"没有赋值权限")} } }
top.location = self.location;
if(top.location.host != self.location.host)
top.location = self.location;
</script>把这段代码放到你想防止被调用的页面中去
if(top.location.host != self.location.host)
top.location = self.location;
</script>把这段代码放到你想防止被调用的页面中去这楼的代理应该是能用的,好像是测试框架在当前页面的顶部对象吧..
if(top.location.host != self.location.host)
top.location = self.location;
</script>这个判断没有效果,假如self的域和top的域不一样,访问top.location.host就会出现没有权限错误,可以这样:
try{top.location.host}catch(exp){
top.location = self.location;
}
try{top.location.host}catch(exp){
top.location = self.location;
}
还是无效的,还是没有top.location的设置访问权限
这也是为什么一般仅仅是那个引入页面被跳转,而不是顶部页面跳转
可能这样更好
try{top.location.host}catch(exp){
self.location = "一个自己定义的页面"
}
如果有冒犯的地方还望见谅。
此外我提一下我的一些意见,就是能完成这样的操作,我想用我后面的代码也可能更好。
虽然别人可能存在一些盗链的行为,但你也不必把顶层窗口跳转到你的页面,而是把被盗页面跳转到一个申明页面,这样可能更友好。
此外如果top.location能够读写,我就不知道为什么其子属性host会无效,因为host仅仅是location经过文本处理分析得到的也就是一个有效URL中协议标记后(如果http://或者ftp://等等)到路径标记/之间的一段字符串而已。
其实location是一个对象,但如果直接访问这个对象,其实就相当于访问location.href,其实上面直接赋值location不是规范的写法,应该是:top.location.href = "xxx"
我刚刚用以下方法遍历了location的所有属性,发现只有location.href可以写,但不可以读,其他属性都是不能读和写,至于为什么这样,可能就是为了可以把顶层的页面可以跳转吧:
try{top.location.host}catch(exp){
for(var o in top.location){
try{top.location[o];alert("属性"+ o +"有读取权限")}catch(exp){alert("属性"+ o +"没有读取权限")}
try{top.location[o] = "xxx";alert("属性"+ o +"有赋值权限")}catch(exp){alert("属性"+ o +"没有赋值权限")}
}
}
大家提到的问题是可以防止别人用iframe盗链,但自己用iframe也同样会提示盗链的。