2014-02-08 3 views
4

Я пытаюсь выяснить, возможно ли программное изменение значения песочницы для iFrame.Toggling iFrame Sandbox

От MDN iframe:

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

Однако изменение атрибута в родительском объекте не приводит к успешному запуску песочницы, как это бы подразумевалось у ребенка.

document.getElementById('myFrame').setAttribute('sandbox', 'allow-scripts'); 

Страница загружалась в этом плавающем фрейме может успешно получить доступ к родителю, который не был бы в случае, если песочница работает. Атрибут изменяет, но защита является ошибочной, поскольку она не препятствует доступу к патенту.

console.log(window.parent.document); 

Вышеупомянутое все еще работает в iFrame, в котором была включена программная программа «программно». Это происходит как в Chrome, так и в Firefox, что подразумевает либо недокументированную функциональность, либо плохо реализованную спецификацию.

У кого-нибудь есть идеи относительно того, что будет подходящим ожиданием?

ответ

0

Попробуйте эту скрипку: http://jsfiddle.net/yAwxy/ Не работает, когда скрипт запущен onLoad b/c iframe уже работает. Если вы попробуете onDomready, песочница применяется b/c, сценарий еще не запущен. При входе в систему с помощью этой скрипку:

<iframe id="myFrame" srcdoc="<script>console.log('Executing script inside iFrame')</script>"> 
</iframe> 

И в сценарии

console.log('Executing script inside page') 

Когда сценарий console.log('Executing script inside page') обернута onLoad, то outpu является:

Executing script inside iFrame 
Executing script inside page 

И когда обернутый onDomready:

Executing script inside page 
Executing script inside iFrame 

См. Также http://jsfiddle.net/yAwxy/1/.

Так, чтобы изменить правила, они должны быть изменены OndomReady

+0

Извините, это не то, о чем я прошу. Я спрашиваю, можно ли переключать атрибуты безопасности песочницы, и браузер их принимает. – joseeight

+0

Извините, но вы не понимаете проблему, но не об изменении значений атрибутов, это о браузерах, которые фактически реализуют измененные значения и соответствующие меры безопасности для песочницы, которых они в настоящее время нет. Это не простой вопрос, поэтому, если вы не знакомы с песочницей HTML5, вы вряд ли поймете. Спасибо за попытку. – joseeight

+1

Чтобы быть понятным, если вы читаете статью о MDN, можно программно изменить свойства песочницы или, по крайней мере, это должно быть, поскольку они конкретно указывают, что это угроза. Проблема в том, что она не работает, поэтому это означает, что нет никакой угрозы, однако нет упоминания о реализации, что после изменения «песочницы» загрузки «загрузка» не будет применена или разрешена, что, по-видимому, имеет место теперь как в Chrome, так и в Firefox. – joseeight

0

Я бегу на аналогичные вопросы при попытке динамически создавать содержимое Iframe в Internet Explorer внутри песочницы фрейма. Я попытался сделать то же самое, что и вы, используя javascript для добавления атрибута sandbox после того, как iframe уже был создан, и содержимое, размещенное в iframe (с использованием javascript: URI в атрибуте src =), но iframe, похоже, сохраняет его атрибуты, которые были присутствующих во время загрузки на страницу.

Internet Explorer действительно работает по-другому, чем FireFox или Chrome, когда дело доходит до применения атрибута sandbox. Chrome и FireFox позволят динамически создавать содержимое с помощью src = javascript: function(), когда установлена ​​песочница = «allow-scripts». Похоже, что IE применяет уникальный домен из атрибута sandbox во время создания и считает src = javascript: function() не одинаковым и не позволяет динамическое создание содержимого iframe.

Я не уверен, почему вы пытаетесь добавить атрибут sandbox программно, но если проблема заключается в попытке просто загрузить iframe с динамическим источником, вы можете использовать атрибут srcdoc, а также атрибут sandbox с единственным что IE не поддерживает атрибут srcdoc.

Чтобы ответить на ваш вопрос, я не верю, что можно загрузить iframe и его содержимое, а затем добавить атрибут sandbox после факта и вести iframe как изолированный iframe.