通过删除链接防止iFrame被破坏

时间:2015-04-27 15:43:59

标签: javascript iframe drag-and-drop node-webkit framebusting

我有一个嵌入iFrame与外部域的页面。所以我无法在其DOM中插入任何内容。该页面使用Node-Webkit(基于Chromium)运行,但由于任何浏览器的行为都相同,我认为这是一般的JavaScript问题。

我想阻止用户放弃链接"进入我的页面并进入iFrame。

对于我的网页,我可以嵌入一个侦听特定事件的小型JavaScript代码段,例如: "降"或" dragend":

// prevent dragging & dropping links into this application:
function handleDragEvent(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
}
var dragEvents = ['dragend',  'drop', 'dragenter', 'dragleave', 'dragover'];
for (var i = 0; i < dragEvents.length; i++) {
    window.removeEventListener(dragEvents[i], handleDragEvent);
    window.addEventListener(dragEvents[i], handleDragEvent);
}

到目前为止,一切正常:链接放入我的页面无法导航到。从我的页面内部链接到iFrame的链接不会导航,但仍然可以拖动到外部浏览器窗口(可以通过&#34; dragstart&#34;来阻止它,但它对我来说没问题)。

但是如果用户将链接从外部浏览器直接删除到iframe中,它就会劫持&#34;劫持&#34;整个窗口 - 不仅仅是iframe。这就是我想要阻止的。

我设置了一个小jsfiddle来演示这种奇怪的行为(使用Firefox和Chrome测试过)。

问题:如果有人从外部窗口将链接放入iFrame,如何阻止浏览器更改顶部位置?

2 个答案:

答案 0 :(得分:0)

我不知道你是否在普通浏览器或node-webkit中担心这个问题?

如果您要询问node-webkit(现在称为nwjs),那么您是否尝试在iframe上使用nwfaketop

我认为此页面上的信息可能与您的信息有关:https://github.com/nwjs/nw.js/wiki/Mini-browser-in-iframe

答案 1 :(得分:0)

这里有一个与nw.js相关的问题:https://github.com/nwjs/nw.js/issues/4914

似乎唯一可能改变阻力和iframe的drop行为是向加载的iframe添加事件监听器(监听'load'事件)并覆盖默认行为,例如对于'dragover'活动:

// identify the iframe element
var frameElem = document.getElementById('main');

frameElem.contentWindow.addEventListener('dragover', function(e){
  e.preventDefault();
  e.stopPropagation();
}, false);