2014-03-03 38 views
1

因此,我製作一個小部件,從客戶端提取一些文本,將其發送回服務器進行處理,並將iframe嵌入到客戶端。但是,如果出現任何錯誤,我的客戶希望我完全隱藏/移除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請求,但我不知道如何這將幫助我解決跨產地政策。

+0

tl; dr - 當有可能時,最好使用ajax而不是iframe,https://api.jquery.com/jQuery.get/。 *編輯:在你的情況下不可能,因爲它會觸發一個跨源異常* – TastySpaceApple

+0

iframe的內容是從另一個域?對此有所瞭解。 – Jai

+0

對......羅傑。編輯。 – TastySpaceApple

回答

1

如果你有機會獲得iframe的內容,你可以:

  1. 默認隱藏
  2. 的iframe在iframe中的內容的成功加載,使用parent.document.getElementById('client_site_iframe').style.display = 'block';的iframe源內所展現的iframe 。
+2

只有當iFrame源和父源位於相同的原始位置時,這纔會起作用。 – ankits

+0

這仍然會觸發同源策略異常,因爲這是一個跨源請求。 (從iframe到其父代) – TastySpaceApple

+0

嘗試訪問iframe的父代時,協議,域和端口必須匹配。只要這些都是一樣的,這應該沒問題。 – athms