Jquery 使用javascript更改ie中的iframe源代码

Jquery 使用javascript更改ie中的iframe源代码,jquery,iframe,Jquery,Iframe,我使用的iframe如下所示: <iframe style='width: 330px; height: 278px' scrolling='no' name="iframeId" class="advPlayer" id="iframeId" frameborder="0" src='../../player/iabpreview.php?adid=<?php echo $selectedAdIdx ?>&amp;autoPlay=true'></ifra

我使用的iframe如下所示:

<iframe style='width: 330px; height: 278px' scrolling='no' name="iframeId" class="advPlayer" id="iframeId" frameborder="0" src='../../player/iabpreview.php?adid=<?php echo $selectedAdIdx ?>&amp;autoPlay=true'></iframe>
这适用于Firefox,但不适用于Internet Explorer


什么代码也适用于Internet Explorer?

frames集合返回窗口对象(或等效对象)。您希望以文档对象为目标;试着做:

document.getElementById("iframeId").src = "Your URL here."
window.frames['iframeId'].document.location.href=..

这适用于IE、FF、Safari等,因此也不需要混乱的浏览器检测


注意。IIRC框架集合在IE中引用了name,在其他浏览器中引用了id,因此您需要在上同时使用name和id属性-但您已经有了,所以不用担心

只需使用以下代码即可

var iframe = document.getElementById('IFRAME ID'); // just for clarity
iframe .src = 'URL here';

它应该适用于所有浏览器。

document.getElementById('MsgBoxWindow')。getAttribute('src')
适用于Internet Explorer、Firefox、Safari以获取源URL


document.getElementById('MsgBoxWindow').setAttribute('src',urlWithInDomain)
在相同的浏览器上工作以设置源URL


但是,在调用之前必须加载iframe。调用JavaScript代码时,不要将其放在iframe之前。如果在页面加载之后立即调用iframe,则可以将两者都放在iframe之后,它将按预期工作。

我尝试了
getElementById
和许多其他变体。没有一个在IE、FF、Opera或Chrome上工作相同


这一个很好用:
parent.frames.IFRAME_ID.location.href='/'

因为您已经使用了jquery标记,所以这可能很方便

function resizeIframe(height) {
    height = parseInt(height);
    height += 100;
    $('iframe#youriframeID').attr('height', height);   
}
如果您正在进行跨浏览器调整大小,请看这篇文章,它解释了如何根据iframes内容自动调整高度。您需要访问iframed网站的html。

您可以使用两种方法更改iframe的src:

  • 更改href
  • 更改src
  • 这两种方法都要求在尝试修改之前完全加载iFrame

    更改href适用于所有浏览器,包括IE5。 您可以在框架中寻址

    • 通过参考元素的contentwindow:

      var myFrame=document.getElementById('myFrame'); myFrames.contentWindow.location=''

    • 通过引用元素的名称:

      var myFrame=window.frames.myFrame;//其中myFrame是元素的名称 myFrame.location=''

    如上所述,通过选择元素并更改src来更改src-但它必须是子元素,而不是子元素

    var myFrame = document.getElementById('myFrame');
    myFrame.src = 'http://example.com' 
    

    您不应该使用“浏览器检测”,而应该使用功能检测。imho最安全的方式是:

    function SetIFrameSource(cid, url){
      var myframe = document.getElementById(cid);
      if(myframe !== null){
        if(myframe.src){
          myframe.src = url; }
        else if(myframe.contentWindow !== null && myframe.contentWindow.location !== null){
          myframe.contentWindow.location = url; }
        else{ 
          myframe.setAttribute('src', url); 
        }
      }
    }
    

    只需测试src属性是否可用。如果没有,请在内容窗口上进行测试,最后一次尝试是setAttribute。

    我从其他地方得到了这个:

    function getElementById(strId) {
      var element;
    
      if (document.getElementById) {
        element = document.getElementById(strId);
      }
      else if (document.all) {
        element = document.all[strId];
      } else if (document.layers) {
        element = document.layers[strId];
      } else {
        element = eval("document." + strId);
      }
    
      return element;
    }
    
    它有内存泄漏。在iframe src多次更改后,浏览器将变慢为爬行

    window.frames['iframeId'].document.location.href =...
    
    也有内存泄漏。IE浏览器更倾向于放弃这种效果。

    
    
    <script type="text/javascript">
      function changesrc(iframid, pagesrc)
      {
        document.getElementById(iframid).src = pagesrc; 
      }
    </script>
    
    <table style="width: 100%">
    <tr>
      <td>
        <a href="#" onclick="changesrc('iframe1','page1.php')">Page1</a> <br/>
        <a href="#" onclick="changesrc('iframe1','page2.php')">Page2</a> <br/>
        <a href="#" onclick="changesrc('iframe1','page3.php')">Page3</a>
      </td>
      <td>   
        <iframe id="iframe1" src="page1.php" scrolling="no" 
                height="100%" width="100%" style="border:0px;"></iframe>
      </td>
    </tr>
    </table>
    
    函数changesrc(iframid,pagesrc) { document.getElementById(iframid).src=pagesrc; }


    请注意,如果您只是更改URL的锚定(即从page.php改为page.php),IE不会刷新页面,但Chrome和Firefox会。如果这是您的问题,那么您可能希望在查询字符串中添加一些随机内容,使IE认为这是一个全新的页面,并强制重新加载

    例如(使用jQuery):


    对我来说,它在Safari不起作用。相反,它会更改页面本身的URL。事实上,这里发布的所有解决方案似乎都做到了这一点。这是一个很大的谜。你自己看看:我已经在IE 6-9中验证了这一点,Chrome、Safari、Firefox和Opera.getElementById在iframe中根本不起作用。我必须通过“窗口”来引用它……这绝对是一条路。将由所有浏览器支持。这是更好的解决方案。我创建了一个jQuery函数,这样您就可以向它传递选择器(id、类或元素):函数setIFrameSource(选择器、url){var myframe=$(选择器)[0];if(myframe!==null){if(myframe.src){myframe.src=url;}else if(myframe.contentWindow!==null&&myframe.contentWindow.location!==null){myframe.contentWindow.location=url;}其他{myframe.setAttribute('src',url);}}}用法:
    setIFrameSource('.fancybox iframe','/somepage.htm');
    此内存泄漏是否特定于特定浏览器?
    window.frames['iframeId'].document.location.href =...
    
    <script type="text/javascript">
      function changesrc(iframid, pagesrc)
      {
        document.getElementById(iframid).src = pagesrc; 
      }
    </script>
    
    <table style="width: 100%">
    <tr>
      <td>
        <a href="#" onclick="changesrc('iframe1','page1.php')">Page1</a> <br/>
        <a href="#" onclick="changesrc('iframe1','page2.php')">Page2</a> <br/>
        <a href="#" onclick="changesrc('iframe1','page3.php')">Page3</a>
      </td>
      <td>   
        <iframe id="iframe1" src="page1.php" scrolling="no" 
                height="100%" width="100%" style="border:0px;"></iframe>
      </td>
    </tr>
    </table>
    
    var hash = 'yourHash';
    var rand = 1 + Math.floor(Math.random() * 9999);
    var helpUrl = 'page.php?rand=' + rand + '#' + hash;
    $('#iframe').attr('src', helpUrl);