从iframe中删除ID

时间:2016-05-12 16:21:23

标签: javascript html iframe

我有一个来自我使用的网站的某个页面的iframe,但我不希望该页面的所有部分都与iframe一起显示。特别是,页面上的导航侧边栏我不想在iframe中。我试图通过下面的javascript来实现这一点,但我无法理解它。

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

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

</iframe>

4 个答案:

答案 0 :(得分: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');

I帧:

window.addEventListener('iframeTrigger', hideSidebar);

function hideSidebar() {
    //do stuff
}

答案 1 :(得分: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);
  }

希望这可以满足您的需求。

答案 2 :(得分:0)

这应该在理论上有效,并且可以在private loginSuccess(res: IAuthResponse) { this.auth = res; //this is undefind } 中使用。但是这在HTML中不起作用,尽管由于安全原因你是从同一个域尝试它。我只想告诉我的观点,我尝试了这个:

console

答案 3 :(得分:0)

您需要在页面加载时执行代码,您可以这样执行:

var keys = argv[2].split('.');
var result = obj;
keys.forEach(function(key){
    result = result[key]
});
return result;