динамически создавать iframe со скриптом, который вызывает RSS-канал - PullRequest
0 голосов
/ 17 ноября 2011

Я работаю над проектом, в котором я создаю iframe и заполняю его HTML-кодом для отображения RSS-канала. Код ниже показывает, как я это делаю. Он отлично работает в Firefox, но когда я запускаю функцию в Internet Explorer, он не загружает RSS-канал. есть идеи?

Функция 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>

Ответы [ 3 ]

0 голосов
/ 17 ноября 2011

Почему вы не используете jQuery и функцию .append () и не имеете отдельной страницы для подъема?

например. $ (Это) .append ( '');

0 голосов
/ 18 ноября 2011

Хорошо, я понял это, когда писал в iframe, Internet Explorer более требователен к синтаксису, чем firefox, поэтому мне пришлось использовать некоторые escape-коды, чтобы заставить его работать. Также я изменил код, так что теперь он принимает URL-адрес RSS и добавляет его по нажатию кнопки. пожалуйста, смотрите код ниже.

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');" />     
0 голосов
/ 17 ноября 2011

Редактировать: После просмотра вашего JavaScript, я вижу, что мое первоначальное наблюдение - красная сельдь (хотя оно все еще выглядит для меня проблемой).Я стараюсь избегать document.write().Некоторые лучшие варианты:

  • Добавлять элементы в DOM вместо document.write().
  • Еще лучше, вместо того, чтобы выводить JavaScript, который выводит HTML из php, просто выводить HTML из phpи установите 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;

Однако вопрос спорный из-за проблем, указанных выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...