我希望只显示一个表单,如果它被拉到iframe中的页面上。我怎么做?是否有服务器端解决方案?
答案 0 :(得分:5)
如果您使用的是JQuery ...(此处的安装说明:http://jquery.com/)
$(document).ready(function(){
if( window == window.top) { $('form#myform').hide(); }
});
如果窗口不是最顶层的窗口,则只隐藏具有id“myform”的表单。
答案 1 :(得分:2)
我想不出纯粹的服务器方式,但你可以使用一些混合的javascript / rails。
假设您有一个专用的iframe布局模板,例如'布局/ iframe.erb'
你可以在头部放一些javascript来检查它是否作为iframe加载,如果不是,重定向到一个动作并可能显示一个flash msg“只能在应用程序中加载这个页面”
头部的javascript / rails
<script type="text/javascript">
function parentExists()
{
return (parent.location == window.location)? true : false;
};
function check_modal(){
if (parentExists()) {
window.location = '<%= url_for( :controller => "home", :action => 'iframe_action', :iframe_fail => 'true')%>'}
}
check_modal()
</script>
注意你可以在控制器中检查的参数:iframe_fail,如果存在该参数,请做任何你喜欢的事情,例如:显示flash msg或重定向
示例控制器
def iframe_action
if params[:iframe_fail]
flash[:notice] = 'can only load inside app'
else
#do something else
end
end
不是很漂亮但可能会帮助你完成工作。
答案 2 :(得分:0)
我的iframe标签就像
%iframe{:height => "98%", :width => "98%",:"id" => "profileIframe"}
我想在此iframe中隐藏我的网页标题,因此我将代码用作:
var $frame = $(window.parent.frames["profileIframe"]).contents();
$frame.find('.header-ui').hide();
如果你观察到那么contents()返回一个元素为“#document”,这是iframe的html,因此在没有这个的情况下调用javascript将尝试访问在iframe背景中呈现的实际网页。
答案 3 :(得分:-5)
您只能通过JavaScript在客户端进行检查。
但是:不要那样。将网站放在(i)框架中有很多合法用途。在这种情况下,打破这样的iframe或以任何方式更改您的网站,只会让您的用户感到不快。