【问题标题】:Hide the iframe in case of internal server error在内部服务器错误的情况下隐藏 iframe
【发布时间】:2014-04-04 13:22:24
【问题描述】:

所以我正在制作一个小部件,它从客户端提取一些文本,将其发送回服务器进行处理,并将 iframe 嵌入客户端。但是,如果出现任何错误,我的客户希望我完全隐藏/删除 iframe,而不是生成自定义错误页面。我想知道实现这一目标的最佳方法是什么。这是我要给客户的脚本:

<script type="text/javascript">


$(document).ready(function(){

if($(".single-post").length===1)
{ 
heading =$('.post h2').text();
heading =heading.trim();

link = $('.post h2 a').attr('href');

date = $('.post .meta .timr').text()

if($('div .entry p').text()!="")
para_full = $('div .entry p').text()
total_length = para_full.length;
if (total_length<3000)
{
text_send = para_full;
}
else{

tsstart = (total_length/2) - 250;
tsend = (total_length/2) + 250;
text_send = para_full.substring(tsstart,tsend );
}

if($('div .entry img')[0].src !=""  && $('div .entry img')[0].src != "undefined")
image_url = $('div .entry img')[0].src

if($('h3#comments').text()!="" && $('h3#comments').text()!="undefined")
{ 
no_of_comments = $('h3#comments').text()
l = no_of_comments.indexOf('Responses');
no_of_comments = no_of_comments.substring(0,l-1)

}
else
{
  no_of_comments=0;
}


$(".client_site_iframe").attr("src","http://mydomain.com/query?"+"&searchtext="+text_send+"&link="+link+"&imagelink="+image_url+"&heading="+heading+"&date="+date+"&full_text="+para_full);

}

})

</script>


<div class="client_site_container">
<iframe class="client_site_iframe" id="mysite_iframe" width="650px" height="205px" frameborder="no" scrolling="no"></iframe>


</div>

我尝试的一个解决方案是编写一个错误处理函数

myHandler = function(error) {
  document.getElementById('client_site_iframe').style.display = 'none';
}

以下条件会触发

<script>
if ($("#client_site_iframe html body").text().length === '')
{myHandler();}

</script>

但是由于同源策略,这不起作用。事实上,我无法在客户端使用 jQuery 访问在 iframe 中生成的任何 HTML 元素。我想知道是否有更好的方法来实现这一点,我对客户端脚本很陌生,所以我不确定这个问题是否可以完全解决,或者有人推荐使用 AJAX 请求,但我不确定如何这将帮助我解决跨源策略。

【问题讨论】:

  • tl;dr - 如果可能,最好使用 ajax 而不是 iframe,api.jquery.com/jQuery.get编辑:在您的情况下不可能,因为它会触发跨源异常
  • iframe 的内容来自另一个域?对此有所了解。
  • 对... 罗杰。已编辑。

标签: javascript jquery html ajax iframe


【解决方案1】:

如果您可以访问 iframe 的内容,您可以:

  1. 默认隐藏 iframe
  2. 成功加载 iframe 内容后,在 iframe 源中使用 parent.document.getElementById('client_site_iframe').style.display = 'block'; 来显示 iframe。

【讨论】:

  • 这仅在 iFrame 源和父源位于同一来源时才有效,对吗??
  • 这仍然会触发同源策略异常,因为这是一个跨源请求。 (从 iframe 到其父级)
  • 在尝试访问 iframe 的父级时,协议、域和端口必须匹配。只要这些相同,就可以了。
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 2010-09-22
  • 2011-11-21
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
相关资源
最近更新 更多