window.onload=function(){
var iframe = document.getElementsByTagName("iframe")[0];
var win = iframe.contentWindow; // 经过contentWindow获取ifame子页面的window窗体对象。(不容许跨域名访问)
var iframeDocument = iframe.contentWindow.document;
var input1 = iframeDocument.getElementById("id1");
input1.onblur = function() {
console.log(input1.value)
}
}
复制代码
document.onkeydown=function(e){
var keyNum=window.event?e.keyCode:e.which;
console.log(keyNum)
}
复制代码
contentWindow.document
对象,可是非同域名网页,没法获取iframe子页面的winodw窗体对象;var iframe = document.getElementsByTagName("iframe")[0];
var win = iframe.contentWindow;
if(win){
var iframeDocument = iframe.contentWindow.document;
iframeDocument.addEventListener("keydown",function(e){
var keyNum=window.event?e.keyCode:e.which;
console.log("iframe-----"+keyNum)
})
}
复制代码
虽然网页没法获取非同域名下的内嵌网页的DOM相关信息,可是假如用户习惯了在某个非官方的登入入口进入,当该非官方的页面某天更改代码,假设前几回进入的是一个伪造的界面(钓鱼网站),以后登录出错后再切成iframe,用户信息就会被盗取,因此有这个风险,参考baidu、youku、youtube都有作这个处理;javascript
Refused to display 'https://youku.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
if (window.top != window.self) {
// top.location.href = "http://192.168.57.1:8023/";
console.log('被嵌套')
alert("dosth")
}
复制代码
评价: 能够有多种方式绕开,不建议这样作,好比:前端
document.write('<iframe seamless sandbox security="restricted" id="url_mainframe" frameborder="0" scrolling="yes" name="main" src="http://192.168.57.1:8023/" style="height:100%; visibility: inherit; width: 100%; z-index: 1;overflow: visible;"></iframe>');
复制代码
X-FRAME-OPTIONS
属性,经过google搜索meta
和X-FRAME-OPTIONS
关键字,发现该方法已经被弃用了。 X-FRAME-Options in the meta tag来自2016年的邮件:java
#摘要web
当存在于
<meta>
标签内时,'X-Frame-Options'将被忽略(例如<meta http-equiv =“X-Frame-Options”contents =“DENY”>
)。它将继续做为HTTP标头支持。chrome
#动机后端
咱们目前尝试经过在解析标记时取消页面加载并导航到空白页面来支持
<meta>
标记内的X-Frame-Options
。这有点功能,但不彻底是可靠的保护。跨域
实际上,咱们全部的XFO实现都有些不可靠,由于它们都是在Blink中实现的。咱们正在努力将其迁移到浏览器进程,但若是咱们须要支持
<meta>
实现,那将很难干净利落。咱们要么须要Blink和//内容的实现,要么咱们须要另外一个IPC。浏览器
我更愿意删除功能。less
值得注意的是X-Frame-Options 有三个值,它们不止约定是否同域名,还约定了同协议,也就是说假如设定了属性为SAMORIGIN
,访问的父网页网址与内嵌网页的网址http协议应该要要一致(父网页为http,子网页协议为https,也没法访问;可是当父网页为https,子网页为http的状况,未作验证)测试
DENY
表示该页面不容许在 frame 中展现,即使是在相同域名的页面中嵌套也不容许。
SAMEORIGIN
表示该页面能够在相同域名页面的 frame 中展现。
ALLOW-FROM uri
表示该页面能够在指定来源的 frame 中展现。
由于是后端添加HTTP响应头的方法,因此浏览器应该不会出现兼容性的问题,不过照常作了简单测试,PC端测试了Chrome,UC,FireFox,Opera,百度,QQ,360,IE11,移动端测试了手机QQ,都符合预期;
经过后端添加HTTP响应头的方法实现避免网页被嵌套的结果,在控制台报的错误,与嵌套Youtube
与youkun
效果一致:
Refused to display 'https://youku.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
;