我有一个来自我使用的网站的某个页面的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>
答案 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;