Javascript 使用调用rss提要的脚本动态构建iframe

Javascript 使用调用rss提要的脚本动态构建iframe,javascript,iframe,build,rss,Javascript,Iframe,Build,Rss,我正在做一个项目,我正在构建一个iframe,并用html代码填充它以显示rss提要。下面的代码显示了我是如何做到这一点的。它在firefox中运行良好,但当我在InternetExplorer中运行该功能时,它不会加载rss提要。有什么想法吗 JavaScript函数 function AddIframe() { ifrm = document.createElement("iframe"); ifrm.setAttribute(

我正在做一个项目,我正在构建一个iframe,并用html代码填充它以显示rss提要。下面的代码显示了我是如何做到这一点的。它在firefox中运行良好,但当我在InternetExplorer中运行该功能时,它不会加载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();                  
    }
函数AddIframe()
{           
ifrm=document.createElement(“iframe”);
setAttribute(“名称”、“iFrame1”);
ifrm.setAttribute(“id”、“iFrame1”);
文件.body.appendChild(ifrm);
ifrm=(ifrm.contentWindow)?ifrm.contentWindow:(ifrm.contentDocument.document)?ifrm.contentDocument.document:ifrm.contentDocument;
ifrm.document.open();
ifrm.document.write(“testIframe”+String.fromCharCode(60.toString()+”/script>);
ifrm.document.close();
}
HTML


编辑:在浏览了您的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;

但是,由于上述问题,这一点是没有意义的。

为什么不使用jQuery和.append()函数,并为升降设置一个单独的页面


例如:$(本)附加(“”)

好吧,我明白了,在写iframe时,internetexplorer比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);
        }

    }
函数AddIframe(url)
{
试一试{
var SelectedFeed=url;
var semiUrl=“src=“+replacesspecial(SelectedFeed);+”&chan=n&num=20&desc=1&date=y&target=y”;
变量源='src=\'http://itde.vccs.edu/rss2js/feed2js.php?“+semiUrl+”\“;
var htmlWriter=“testIframe”+“”++”
ifrm=document.createElement(“iframe”);
setAttribute(“名称”、“iFrame1”);
ifrm.setAttribute(“id”、“iFrame1”);
文件.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();
}
捕获(e)
{
警报(e);
}
}
函数替换特殊(文本)
{
试试{
var r1=文本;
r1=r1。替换(//g,“%20”);
r1=r1。替换(/@/g,“%40”);
r1=r1。替换(/#/g,“%23”);
r1=r1。替换(/\$/g,“%24”);
r1=r1。替换(/\%/g,“%25”);
r1=r1。替换(/&/g,“%26”);
r1=r1。替换(/=/g,“%3D”);
r1=r1。替换(/\+/g,“%2B”);
r1=r1。替换(/:/g,“%3A”);
r1=r1。替换(/;/g,“%3B”);
r1=r1。替换(/“/g,“%22”);
r1=r1。替换(/\\\/g,“%5C”);
r1=r1。替换(//\//g,“%2F”);
r1=r1。替换(/\?/g,“%3F”);
r1=r1。替换(//g,“%3E”);
r1=r1。替换(/\[/g,“%5B”);
r1=r1。替换(/]/g,“%5D”);
r1=r1。替换(/{/g,“%7B”);
r1=r1。替换(/}/g,“%7D”);
r1=r1。替换(/`/g,“%60”);
Text=r1;
返回文本;
}
捕获(e)
{
警报(e);
}
}
HTML


 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);
        }

    }
  <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');" />