0

Я пытаюсь сделать следующую работу в Chrome: http://jsfiddle.net/3es621uz/1/переплет JavaScript события внутри IFrame песочницы в Chrome

HTML:

<iframe src="about:blank" id="iframe" sandbox="allow-same-origin"></iframe> 

Javascript:

var b, i; 
i = document.getElementById('iframe'); 
b = i.contentDocument.createElement('button'); 
b.innerHTML = 'Click me!'; 
b.addEventListener('click', function() { 
    return alert('Used to work!'); 
}); 
i.contentDocument.body.appendChild(b); 

Нажатие кнопки используется для отображения предупреждения в Chrome в какой-то момент. Он по-прежнему работает в Firefox, но не работает в Safari. Есть ли способ привязать события в iframe извне, не допуская выполнение скриптов внутри него?

+0

Chrome говорит: _Blocked выполнение скрипта в 'about: blank', потому что кадр документа изолирован и разрешение «разрешить-скрипты» не установлено_ – Halcyon

+0

Ну да, но я не хочу устанавливать 'allow-scripts', потому что что позволило бы выполнить любой Javascript. – BvdBijl

ответ

0

MDN упоминает:

Когда встроенный документ имеет то же происхождение главной страницы, настоятельно рекомендуется использовать как allow-scripts и allow-same-origin в то же время, поскольку это позволяет внедренный документ программно удалить атрибут песочницы. Хотя это принято, этот случай не более безопасен, чем не использовать атрибут sandbox.

Вы не можете одновременно включать произвольное (ненадежный) содержание и программно контролировать кадр с помощью sandbox.

Смежные вопросы