Mat*_*eon 8 javascript embed iframe jquery google-chrome-extension
我正在为我的应用程序编写一个简单的类似灯箱的插件,我需要嵌入一个链接到任意页面的iframe.问题是,许多网站(例如,facebook,nytimes,甚至stackoverflow)将检查是否嵌入在一个框架内,如果是,将刷新页面本身作为父页面.这是一个众所周知的问题,我认为没有什么可以做的.但是,如果网站支持嵌入或不支持,我希望能够事先知道.如果没有,我想在新的标签/窗口中打开页面,而不是使用iframe.
有没有一个技巧可以让我在javascript中检查这个?
也许有一个服务器端脚本可以检查链接,看看他们是否允许iframe嵌入?
我正在开发一个浏览器扩展,所以有机会做一些非常有创意的事情.我的扩展程序已加载到每个页面上,所以我认为有一种方法可以在iframe网址中传递一个参数,如果它破坏iframe,则可以通过扩展程序获取该参数.然后,我可以将域添加到不支持iframe嵌入的网站列表中.这可能有效,因为扩展未在iframe中加载.我将继续努力,但与此同时......
澄清:
我愿意接受没有办法"破坏""框架破坏者",即我知道我不能在iframe中显示一个不想在一个页面中的页面.但我希望我的应用程序优雅地失败,这意味着如果不支持iframe嵌入,则在新窗口中打开链接.理想情况下,我想检查iframe在运行时嵌入支持(javascript),但我可以看到使用代理的潜在服务器端解决方案,如上面的评论中所建议的那样.希望我能建立一个不允许嵌入iframe的网站数据库.
使用以下代码检查x-frame-options标头
$url = "http://stackoverflow.com";
$header = get_headers($url, 1);
echo $header["X-Frame-Options"];
Run Code Online (Sandbox Code Playgroud)
如果返回值为DENY,SAMEORIGIN或ALLOW-FROM,则您无法将iframe与该网址一起使用.
这个主题一直在网络上讨论,这里有一个特别有趣的(失败的)尝试:
Frame Buster Buster ...需要 Buster 代码
最重要的是,即使您能够构建一个代理来解析您想要在 iframe 中出现的页面内容,并在将其提供给 iframe 之前删除有问题的代码,您仍然可能会受到“停止和终止”的影响。如果他们听说你在做这件事,就会访问该网站。
如果您不希望您的开发被广泛使用,您可能会侥幸逃脱。如果你希望你的开发变得流行,那就忘掉它,并建立一种不那么卑鄙的方式来处理它。
或者仅为移动设备开发它...;)
更新:好的,根据您的评论,这里有一些品尝:
在javascript中捕获链接上的点击
$("a").click(function(e){
preventDefault(e); // make sure the click doesn't happen
// call a server side script using ajax and pass the URL this.href
// return either a true or false; true = iframe breakout
// set the target attribute of the link to "_blank" for new window (if true)
// set the target attribute of the link to "yourframename" for iframe (if false)
// only now load the page in the new window or iframe
});
Run Code Online (Sandbox Code Playgroud)
PHP 中的服务器端
$d = file_get_contents($url); // $url is the url your sent from the browser
// now parse $d to find .top .parent etc... in the <head></head> block
// return true or false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14854 次 |
| 最近记录: |