Javascript 使用调用rss提要的脚本动态构建iframe
我正在做一个项目,我正在构建一个iframe,并用html代码填充它以显示rss提要。下面的代码显示了我是如何做到这一点的。它在firefox中运行良好,但当我在InternetExplorer中运行该功能时,它不会加载rss提要。有什么想法吗 JavaScript函数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(
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');" />