2011-11-16 60 views
0

我正在創建一個項目,我正在構建一個iframe並用html代碼填充以顯示rss提要。下面的代碼顯示了我如何完成此任務。它在Firefox中工作正常,但是當我在Internet Explorer中運行該功能時,它不會加載RSS源。有任何想法嗎?動態構建iframe與調用rss feed的腳本

JavaScript函數

function AddIframe() 
    {   
     ifrm = document.createElement("iframe"); 
     ifrm.setAttribute("name", "iFrame1"); 
     ifrm.setAttribute("id","iFrame1"); 
     document.body.appendChild(ifrm); 
     ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument; 
     ifrm.document.open(); 
     ifrm.document.write("<html><head><title>testIframe</title></head><body><div> <script language='JavaScript' src='http://itde.vccs.edu/rss2js/feed2js.php?src=http%3A%2F%2Fwww.nfl.com%2Frss%2Frsslanding%3FsearchString%3Dhome&chan=n&num=20&desc=1&date=y&targ=y' type='text/javascript'>" + String.fromCharCode(60).toString() + "/script> </div></body></html>");  
     ifrm.document.close();     
    } 

HTML

<div> 
     <input type="button" value="Click Here" onclick="AddIframe();" /> 
</div> 
+0

http://stackoverflow.com/questions/4614850/jquery-add-iframe-with-content – Jaider

回答

0

編輯:在你的JavaScript偷看之後,我發現我原來的觀察是紅鯡魚(儘管它仍然看起來像麻煩給我)。我儘量避免document.write()。一些更好的選擇:

  • 將元素追加到DOM而不是document.write()
  • 更好的是,不是輸出從PHP輸出HTML的JavaScript,而是直接從php輸出HTML,並將iframe src直接設置到您的php頁面。

原來的答覆:

這些線看起來很可疑:

ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument; 
ifrm.document.open(); 

只有ifrm.contentWindow會存在以下行工作。看和第二個條件,我們知道,如果失敗,沒有ifrm.contentDocument.document和下面的行將無法正常工作。如果第二個條件通過,似乎不太可能有ifrm.contentDocument.document.document屬性。


順便說一句,這雙三元表達式可以更加簡潔:

ifrm = ifrm.contentWindow || ifrm.contentDocument.document || ifrm.contentDocument; 

的一點是沒有實際意義然而,由於上述的問題。

0

爲什麼你不使用jQuery和.append()函數,並有一個單獨的頁面來提升?

例如。 $(本).append( '');

0

好吧我想通了,當寫入iframe時,Internet Explorer比Firefox更挑剔語法,所以我不得不使用一些轉義來使它工作。此外,我更改了代碼,現在它接受rss URL並將其添加到按鈕單擊。請參閱下面的代碼。

的JavaScript

function AddIframe(url) 
    { 
     try{ 
     var SelectedFeed = url;    
     var semiUrl = "src=" + replaceSpecial(SelectedFeed); + "&chan=n&num=20&desc=1&date=y&targ=y"; 
     var source = 'src=\"http://itde.vccs.edu/rss2js/feed2js.php?' + semiUrl + '\"'; 

     var htmlWriter = "<html><head><title>testIframe</title><link rel='stylesheet' href='gadget.css' /></head><body><div>" + '<scr'+'ipt type=\"text/javascript\" ' + source +'></scr'+'ipt>' + "</div></body></html>"      

     ifrm = document.createElement("iframe"); 
     ifrm.setAttribute("name", "iFrame1"); 
     ifrm.setAttribute("id","iFrame1"); 
     document.getElementById("div1").appendChild(ifrm); 
     ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.  contentDocument; 
     ifrm.document.open(); 
     ifrm.document.write(htmlWriter); 
     ifrm.document.close(); 

     } 
     catch(e) 
     { 
      alert(e); 
     } 

    } 

function replaceSpecial(Text) 
    { 
     try{   
      var r1 = Text; 
      r1 = r1.replace(/ /g,"%20"); 
      r1 = r1.replace(/@/g,"%40"); 
      r1 = r1.replace(/#/g,"%23"); 
      r1 = r1.replace(/\$/g,"%24");    
      r1 = r1.replace(/\%/g,"%25"); 
      r1 = r1.replace(/&/g,"%26"); 
      r1 = r1.replace(/=/g,"%3D"); 
      r1 = r1.replace(/\+/g,"%2B"); 
      r1 = r1.replace(/:/g,"%3A"); 
      r1 = r1.replace(/;/g,"%3B");     
      r1 = r1.replace(/"/g,"%22");     
      r1 = r1.replace(/\\/g,"%5C"); 
      r1 = r1.replace(/\//g,"%2F"); 
      r1 = r1.replace(/\?/g,"%3F"); 
      r1 = r1.replace(/</g,"%3C"); 
      r1 = r1.replace(/>/g,"%3E"); 
      r1 = r1.replace(/\[/g,"%5B"); 
      r1 = r1.replace(/]/g,"%5D"); 
      r1 = r1.replace(/{/g,"%7B"); 
      r1 = r1.replace(/}/g,"%7D"); 
      r1 = r1.replace(/`/g,"%60");     

      Text = r1; 

      return Text;      
     } 
     catch(e) 
     { 
      alert(e); 
     } 

    } 

HTML

<input type="button" value="Add Sports" onclick="AddIframe('http://www.nfl.com/rss/rsslanding?searchString=home');" /> 
    <input type="button" value="Add News" onclick="AddIframe('http://msn.com/rss/news.aspx');" />