2012-10-05 64 views
2

我看到這個問題在這裏被多次詢問。部分解決方案部分適用。這是場景。我需要使用<embed>加載一個帶有pdf的iframe。有機會沒有找到PDF,我會在iFrame內顯示錯誤頁面。在IE瀏覽器中檢測具有PDF的iFrame中的onload事件

一旦iframe中被加載,我期待用

$('#iframe').contents().find('embed')

我使用$('#iframe').load()試圖<embed>標籤。這適用於Firefox,Chrome而不是IE。

也嘗試使用$('#iframe').ready()。這適用於IE,但是,

$('#iframe').contents().find('embed')不起作用。

有人可以幫忙嗎?

編輯: IE版本:7或8.相同的來源政策是尊重。

+0

您可能想要驗證:您的父級和iframe是否使用相同的document.domain? IE對於iframe和跨域腳本安全性非常敏感... – IvanL

+0

@IvanL:更新後的問題。 – Prabhat

+0

當我將瀏覽器模式切換到IE7或IE8時,它仍然可以與我的測試設置一起使用。 jquery版本? – IvanL

回答

0

$('#iframe').load<iframe onload="">不起作用。看起來像在IE中iframe的內容不能被訪問。因此要跟蹤iFrame加載,可以使用以下代碼。

$(window).load(function() { 
    try { 
      var s = window.frames[ "iframeName" ].document.body.childNodes[0].innerHTML; 
      if(s.indexOf('My error message') > 0) { 
       alert('Error'); 
      } else { 
       alert('PDF'); 
      } 
     } catch (err) { 
      if($.trim(err.message) != 'Access is denied.') { 
       alert('PDF'); 
      } else { 
       alert('Error'); 
      } 
     } 
}); 

所以,如果一個錯誤消息「我的錯誤消息」發現那麼它是具有消息的定製設計的錯誤頁面,否則它是PDF。

以上解決方案適用於IE7 & IE8。對於其他瀏覽器,可以檢查以下內容: $('#iframe').contents().find('embed').attr('src')

不是一個簡單的解決方案。但爲我工作。

1

你正在使用哪個版本的jQuery和IE?我做了一個小測試設置如下喜歡和它的作品就好了... ...

主要HTML

<html> 
    <head> 
     <title>TEST</title> 
     <script src="jquery-1.8.2.min.js" type="text/javascript"></script> 
     <script type="text/javascript"> 
      $('iframe').ready(function(){ 
       var tag = $('#iframe').contents().find('embed'); 
       alert(tag.attr('src')); 
      }); 
     </script> 
    </head> 
    <body> 
     <iframe id="iframe" src="pdf.html"> 
    </body> 
</html> 

的iFrame HTML

<html> 
    <body> 
     <embed src="mypdf.pdf"/> 
    </body> 
</html> 

測試在Windows 7,IE9。

+0

已更新的問題 – Prabhat

+0

感謝您的回覆。如果嵌入被強制寫入,它就會起作用。而不是pdf。如果Servlet在響應流中打印PDF,IE將在iFrame中引入嵌入。在這種情況下,嵌入無法訪問。 – Prabhat

+0

我看到,PDF正在直接打印而沒有嵌入,並且IE引入了一種嵌入的幽靈來包含您無法訪問的PDF。很高興我能幫你找到問題的根源並解決它。 – IvanL