2016-05-12 97 views
0

我有一个来自我正在使用的网站的某个页面的iframe,但我不希望该页面的所有部分都与iframe一起显示。特别是,页面上有一个导航边栏,我不想在iframe中。我试图用下面看到的JavaScript来实现这一点,但我无法弄清楚它。从iframe中删除id

<iframe width="800" height="800" src="scores/new?site_id=193"> 

<script> 
    var element = document.getElementById("sidebar-wrapper"); 
    element.parentNode.removeChild(element); 
</script> 

</iframe> 
+0

是从该'iframe'相同的域? –

+0

是的,现在一切都只是我的机器本地。我仍在测试 – Spance

回答

2

您可以在iframed网页上插入控件

//inside the iframed page 
    var iframe = (function() { 
     try { 
      return window.self !== window.top; 
     } catch (e) { 
      return true; 
     } 
    })(); 

    if(iframe === true) { 
    var element = document.getElementById("sidebar-wrapper"); 
    element.parentNode.removeChild(element); 
    } 

希望这能满足您的需要。

+1

@Spance这个真的很有用因为它不需要两个站点/域之间的任何类型的连接。 –

3

出于安全原因,您无法通过iframe运行javascript。如果你在同一个域中,但有一些例外,但大部分你应该避免它。

如果iframe不是您可以控制的网站,那么几乎没有什么可以做的。如果您确实控制了其他站点并且它是不同的域,则可以使用postMessage功能。

编辑:检查出的文档是Mozilla将在这里https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

你需要对处理消息并隐藏侧边栏里面创建一个监听器。然后,父母向iframe发送消息以触发该功能。

家长:

var iframe = document.getElementById('#iframeID'); 
iframe.contentWindow.postMessage('iframeTrigger'); 

的Iframe:

window.addEventListener('iframeTrigger', hideSidebar); 

function hideSidebar() { 
    //do stuff 
} 
+0

iframe来自的网站是我自己自己写的一个应用程序 – Spance

+0

这里也有一篇很好的文章https://davidwalsh.name/window-iframe – Rahul

0

这应该在理论上起作用,它在console有效。但是,这不起作用的HTML,虽然你从同一个域尝试它,由于安全原因。我只是想告诉我的看法,我想这:

<iframe src="http://output.jsbin.com/figujeyiyo" frameborder="0" id="ifrm"> 
    Sorry, iframes not supported. 
</iframe> 
<script> 
    console.log(document.getElementById("ifrm").contentDocument.documentElement.getElementsByTagName("div")); 
    e = document.getElementById("ifrm").contentDocument.documentElement.getElementsByTagName("div")[0]; 
    console.log(e); 
    e.parentNode.removeChild(element); 
</script> 
0

您需要执行的代码加载网页时,你可以做这样的:

document.addEventListener('DOMContentLoaded', function() { 
    var element = document.getElementById("sidebar-wrapper"); 
    element.parentNode.removeChild(element); 
    }); 
+0

你不能从父框架做到这一点。 –