如何正确加载iframe内容

时间:2013-02-03 00:36:12

标签: javascript html iframe

我有一个ifram,里面有很多链接,我正在尝试将这些链接正确地复制到我的主页面。我当前的代码复制了链接。例如,如果 iframe中的实际超链接是这样的:

<a href="./ok/doit.php"> 5 </a> 

在将其复制到主页后,超链接变为如下:

http://ok.mysite24.com/spring/./ok/doit.php

所以在点击主页面内的链接后,我会转到死链接而不是实际链接。有没有通过正确复制iframe内容或我应该修改我的iframe内容来解决这个问题?

<script type='text/javascript'>
function getFrameContents(){
   var iFrame =  document.getElementById('myframe');
   var iFrameBody;
   if ( iFrame.contentDocument ) 
   { // FF
     iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
   }
   else if ( iFrame.contentWindow ) 
   { // IE
     iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
   }
 alert(iFrameBody.innerHTML);

document.getElementById('response').innerHTML = iFrameBody.innerHTML

 }
</script>

<iframe id ='myframe' src='http://www.mysite.com/ok.php'></iframe>

<div id="response"> 
    <p><a href="#" onMouseDown="getFrameContents()">getFrameContents! </a></p>

2 个答案:

答案 0 :(得分:1)

在所有链接上检索innerHTML循环之前,用他们的JS-href-property替换他们的DOM-href-attribute。这会将href属性转换为绝对URI。

//clone the body to keep the original untouched
iFrameBody = iFrameBody.cloneNode(true);

var links = iFrameBody.getElementsByTagName('a');
for (var i = 0; i < iFrameBody.getElementsByTagName('a').length; ++i) {
    if (links[i].hasAttribute('href')) {
        links[i].setAttribute('href', links[i].href);
    }
}

答案 1 :(得分:-1)

看起来您想要将一个相对地址解析为iframe的源地址,该地址也可能是相对的。 Psuedo代码(ish):k

function resolveAddress(source, link) {
   if(link.indexOf("../") == 0) {
       index--; // go up one directory .//
       return resolveAddress(source.substr(0,source.lastIndexOf("/")-1),
                      link.substr(1, link.length-1)); 
   }
   else if(link.indexOf("./") == 0) {
       // reduce to current directory ./
       return resolveAddress(source.substr(0,source.lastIndexOf("/"),
                      link.substr(2, link.length-1));
   }
   return source + link;
}      

frame_src = "http://www.mysite.com/ok.php"
link = "./ok/doit.php";

resolveAddress(frame_src, link);
//=> "http://www.mysite.com/ok/doit.php"