Предотвратите взлом iFrame, опустив ссылку

У меня есть страница, которая встраивает 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 из внешнего окна?

2 ответа

Здесь есть проблема, связанная с 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);

Я не могу сказать, беспокоитесь ли вы об этом в обычных браузерах или в node-webkit?

Если вы спрашиваете о node-webkit (теперь он называется nwjs), то пытались ли вы использовать nwfaketop на вашем фрейме?

Я думаю, что информация на этой странице может быть вашей после: https://github.com/nwjs/nw.js/wiki/Mini-browser-in-iframe

Другие вопросы по тегам