/** * XHConn2.js的实现函数库: * setInnerHTML(el, htmlCode) - 把HTML语句以innerHTML的方式插入到指定页面元素中 * fillText(url, paneName) - 用于读取外部连接,以innerText的方式插入到指定页面元素中 * fillHTML(url, paneName) - 用于读取外部连接,以innerHTML的方式插入到指定页面元素中 * fillRSS(xmlUrl, xslUrl, paneName) - 用于读取外部XML和XSL,转化为HTML后插入到指定页面元素中 * * 工具: * isSameDomain(addr1, addr2, protocol) - 判断两个地址是否在同一个域下 */ var MSG_XMLHTTP_LOADING = "信息加载中,请稍候..."; var MSG_XMLHTTP_404 = "无法得到所需的资源,请确认链接是否正确。"; var MSG_NO_XML_XSL_URL = "未指定新闻资源链接,请确认链接是否正确。"; function setInnerHTML(el, htmlCode) { var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) { htmlCode = '
for IE
' + htmlCode; htmlCode = htmlCode.replace(/]*)>/gi, ''); el.innerHTML = htmlCode; el.removeChild(el.firstChild); } else { var el_next = el.nextSibling; var el_parent = el.parentNode; el_parent.removeChild(el); el.innerHTML = htmlCode; if (el_next) { el_parent.insertBefore(el, el_next) } else { el_parent.appendChild(el); } } } function fillText(url, paneName, fnHandleContent){ var pane = findObj(paneName); var myConn = getXHConn2(); myConn.addJob(function(oXML){ if(!oXML) setInnerHTML(pane, MSG_XMLHTTP_404); else if(oXML.status == 200 && oXML.responseText) if(fnHandleContent){ pane.innerText = fnHandleContent(oXML.responseText); } else { pane.innerText = oXML.responseText; } else setInnerHTML(pane, MSG_XMLHTTP_404); }, url); myConn.start(); } function fillHTML(url, paneName, fnHandleContent){ var pane = findObj(paneName); var myConn = getXHConn2(); myConn.addJob(function(oXML){ if(!oXML) setInnerHTML(pane, MSG_XMLHTTP_404); else if(oXML.status == 200 && oXML.responseText) if(fnHandleContent){ setInnerHTML(pane, fnHandleContent(oXML.responseText)); } else { setInnerHTML(pane, oXML.responseText); } else setInnerHTML(pane, MSG_XMLHTTP_404); }, url); myConn.start(); } function fillRSS(xmlUrl, xslUrl, paneName, fnHandleContent){ var pane = findObj(paneName); var myConn = getXHConn2(); pane.xmlContent = null; pane.xslContent = null; myConn.addJob(function(oXML){ if(!oXML) setInnerHTML(pane, MSG_XMLHTTP_404); else if(oXML.status == 200 && oXML.responseText) pane.xmlContent = oXML.responseText; else setInnerHTML(pane, MSG_XMLHTTP_404); }, xmlUrl); myConn.addJob(function(oXML){ if(!oXML){ setInnerHTML(pane, MSG_XMLHTTP_404); }else if(oXML.status == 200 && oXML.responseText){ pane.xslContent = oXML.responseText; try{ var htmlContent = assembleXML(pane.xmlContent, pane.xslContent); if(fnHandleContent){ htmlContent = fnHandleContent(oXML.responseText); } setInnerHTML(pane, htmlContent); } catch(e){ setInnerHTML(pane, MSG_XMLHTTP_404); } } else { setInnerHTML(pane, MSG_XMLHTTP_404); } }, xslUrl); myConn.start(); } //工具:判断两个地址是否在同一个域下 function isSameDomain(addr1, addr2, protocol){ //判断是不是同一个域 if(!protocol){ protocol = "http://"; } else if(protocol.indexOf("://") < 0){ protocol = protocol + "://"; } var str_sp = "/"; var addr1 = addr1.toLowerCase(); var addr2 = addr2.toLowerCase(); if(addr1.indexOf(protocol) == 0 && addr2.indexOf(protocol) == 0){ addr1 = addr1.substring(protocol.length); addr2 = addr2.substring(protocol.length); if(addr1.indexOf(str_sp) >= 0){ addr1 = addr1.substring(0, addr1.indexOf(str_sp)); } if(addr2.indexOf(str_sp) >= 0){ addr2 = addr2.substring(0, addr2.indexOf(str_sp)); } return (addr1 == addr2); } }