New*_*ang 40 html javascript browser frame x-frame-options
有没有什么好方法可以检测由于X-Frame-Options标题页面何时不会显示在页面中?我知道我可以请求页面服务器端并查找标题,但我很好奇浏览器是否有任何捕获此错误的机制.
小智 12
好吧,这个很旧但仍然相关.
事实: 当iframe加载被X-Frame-Options阻止的URL时,加载时间非常短.
Hack: 所以如果onload立即发生,我知道它可能是一个X-Frame-Options问题.
免责声明: 这可能是我编写的"最骇客"的代码之一,所以不要期望太多:
var timepast=false;
var iframe = document.createElement("iframe");
iframe.style.cssText = "position:fixed; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;";
iframe.src = "http://pix.do"; // This will work
//iframe.src = "http://google.com"; // This won't work
iframe.id = "theFrame";
// If more then 500ms past that means a page is loading inside the iFrame
setTimeout(function() {
timepast = true;
},500);
if (iframe.attachEvent){
iframe.attachEvent("onload", function(){
if(timepast) {
console.log("It's PROBABLY OK");
}
else {
console.log("It's PROBABLY NOT OK");
}
});
}
else {
iframe.onload = function(){
if(timepast) {
console.log("It's PROBABLY OK");
}
else {
console.log("It's PROBABLY NOT OK");
}
};
}
document.body.appendChild(iframe);
Run Code Online (Sandbox Code Playgroud)
免责声明:我在2012年写的这个答案(Chrome当时的版本是20版)已经过时了,我会将它保留在这里仅用于历史目的.阅读和使用需要您自担风险.
好的,这是一个有点老问题,但这是我发现的(这不是一个完整的答案)Chrome/Chromium.
检测指向外部地址的帧是否已加载的方法只是尝试访问其contentWindow或文档.
这是我使用的代码:
element.innerHTML = '<iframe class="innerPopupIframe" width="100%" height="100%" src="'+href+'"></iframe>';
myframe = $(element).find('iframe');
Run Code Online (Sandbox Code Playgroud)
然后,后来:
try {
var letstrythis = myframe.contentWindow;
} catch(ex) {
alert('the frame has surely started loading');
}
Run Code Online (Sandbox Code Playgroud)
事实是,如果X-Frame-Options禁止访问,那么myFrame.contentWindow将是可访问的.
这里的问题是我所谓的"当时,后来".我还没有想出要依赖什么,哪个事件可以用来查找何时是进行测试的好时机.
我唯一能想到的就是代理一个针对url的AJAX请求,然后查看标头,如果它没有X-Frame-Options,则在iframe中显示它。远非理想,但总比没有好。
| 归档时间: |
|
| 查看次数: |
19190 次 |
| 最近记录: |