Можно ли выполнить изолированную программную среду JavaScript в IFrame, где содержимое IFrame работает в одном домене? - PullRequest
1 голос
/ 11 ноября 2010

У нас есть приложение, которое реконструирует внешние веб-сайты в Iframe из нашего домена, поэтому мы можем использовать инструменты, которые запускаются в браузере, для проверки внешнего веб-сайта. Это неизбежное требование, поскольку нам нужно собирать информацию о внешней странице с помощью JavaScript. Если бы страница не была восстановлена ​​из нашего домена, мы столкнулись бы с проблемами межсайтового скриптинга.

Проблема в том, что скрипты на некоторых страницах перенаправляются из iframe, что останавливает работу нашего инструмента.

Мой вопрос заключается в том, существует ли способ разрешить выполнение сценариев внутри iframe, но не повлиять на страницу, содержащую iFrame?

Надеюсь, что это имеет смысл - спасибо!

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Нет, я так не думаю.

Если Iframe загружен из того же домена, любой скрипт будет иметь полный доступ к странице.

Перенаправление страницы, на которую вы ссылаетесь, является защитой страницы от угона, когда другой сайт пытается использовать содержимое страницы.

Избавляясь от iframe, они избегают этого.

0 голосов
/ 11 декабря 2011

Вы можете попробовать использовать отдельное окно (window.open) для загрузки восстановленных внешних сайтов вместо iframe. Пока они находятся в одном домене, они по-прежнему смогут общаться, но дочернее окно вряд ли будет связываться с вашим главным окном.

В качестве альтернативы, ваше внешнее окно может ничего не делать и находиться в другом (суб) домене, чем ваше контрольное окно. Ваше окно управления - это iframe во внешнем окне, а восстановленный внешний сайт - это еще один iframe, использующий тот же домен, что и ваш кадр управления. Теперь, если ваш 'внешний' iframe попытается что-то сделать с window.top (помимо навигации), он потерпит неудачу из-за междоменной политики, но ваш контрольный iframe будет использовать тот же домен, что и ваш 'внешний' iframe, так что вы можете проверить и манипулировать им.

Если вы используете второй подход, фреймы все равно смогут перемещаться по верхнему окну. Вы можете предотвратить это, добавив что-то вроде этого в верхнем окне:

window.onbeforeunload = function(){return '';};

Теперь вам будет предложено диалоговое окно, если что-то пытается перейти по странице, и вы можете прервать навигацию. Это, вероятно, исправит ваш текущий подход сам по себе, но может быть лучше иметь верхнее окно в отдельном домене на случай, если внешний сайт попытается сделать с ним что-то неожиданное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...