1

我有一个嵌入了带有外部域的 iFrame 的页面。所以我不能在它的 DOM 中插入任何东西。该页面使用 Node-Webkit(基于 Chromium)运行,但由于此行为对于任何浏览器都是相同的,因此我认为这是一个普遍的 JavaScript 问题。

我想防止用户将链接“拖放”到我的页面和 iFrame 中。

对于我的页面,我可以嵌入一个小的 JavaScript 片段来监听特定事件,例如“drop”或“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 的链接无法导航,但仍然可以拖入外部浏览器窗口(可以使用“dragstart”阻止,但对我来说没关系)。

但是,如果用户将来自外部浏览器的链接直接放到 iframe 中,它会“劫持”整个窗口——而不仅仅是 iframe。这就是我想要阻止的。

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

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

4

2 回答 2

0

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

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

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

于 2015-04-28T10:49:49.970 回答
0

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

似乎更改 iframe 的拖放行为的唯一可能性是将事件侦听器添加到加载的 iframe(侦听“load”事件)并覆盖默认行为,例如“dragover”事件:

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

frameElem.contentWindow.addEventListener('dragover', function(e){
  e.preventDefault();
  e.stopPropagation();
}, false);
于 2017-03-08T10:48:18.570 回答