2016-09-12 5 views
2

Возможно ли открыть страницу с номером window.open, чтобы позволить себя осмотреть крестообразным открывателем? (Это используется во внутренних приложениях, поэтому безопасность не является серьезной проблемой.) И если да, то как? Я попытался заменить все политики CORS и Same-Origin, которые я могу найти, и все еще получаю Access Denied по всем свойствам дочернего окна.Когда страница открывается с помощью window.open, как открытая страница позволяет открывающему доступу к ее содержимому?

В частности, я пытаюсь использовать Internet Explorer 11

Headers

Они все заголовки, я пытался до сих пор

Access-Control-Allow-Origin: http://web1.corp.local 
Access-Control-Allow-Credentials: true 
Access-Control-Expose-Headers: Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma 
Access-Control-Expose-Methods: GET,POST,OPTION,PUT,DELETE,HEAD 
X-Content-Security-Policy: default-src *;script-src * 
Content-Security-Policy: default-src *;script-src * 
X-XSS-Protection: 0 
X-Permitted-Cross-Domain-Policies: all 

То, что я пытаюсь ...

Я хочу web1.corp.local выполнить JavaScript на странице по web2.corp.local. Я контролирую оба домена; Мне просто нужно web2, чтобы сообщить обозревателю web1, чтобы читать и исполнять вещи на web2.

Запрос на http://web1.corp.local

Я пытаюсь вызвать функции JavaScript в открывшемся окне с открывалка.

document.domain = "corp.local"; 
var web2 = window.open('http://web2.corp.local'); 
web2.document; //Throw "Access Denied" 
web2.MyApp; // undefined 

Javascript на http://web2.corp.local

document.domain = "corp.local"; 
var myapp = window.MyApp = { 
    doWork: function() { 
     alert('Hello World!'); 
    } 
}; 

Примечание: У меня есть решение, используя IFrame прокси и window.postMessage, но приложение, размещенную на web2 не работает правильно с в плавающем фрейме.

Обновление: Проблема заключалась в том, что две страницы не использовали document.domain, и я пропустил исключение в открывшемся окне.

+0

Я думаю, что вы имели в виду что-то другое посредством межсайтового скриптинга, чем на самом деле. Вы имели в виду междоменные запросы? –

+0

нет, я имею в виду межсайтовый скриптинг. Мне нужно сделать запрос из сеанса клиента, представленного на 'http: // web1.corp.local', на' http: // web2.corp.local'. Я использовал 'window.open (...)' из 'web1', но независимо от того, что я делаю, все свойства этого открытого окна представлены как' access denied' –

+0

(И я не думал, что CORS разрешит это, но это было лучшее, что я мог найти.) –

ответ

0

По-видимому, он действительно разбит в IE, если это междоменный и между окнами (а не кадрами).

Взгляните на этот вопрос: Is cross-origin postMessage broken in IE10?

Особенно ответ на brunolau в нижней части выглядит многообещающим и может быть только то, что вам нужно. В IE11 есть надежда, но они также упоминают обновление, снова разбивающее его. Странно быть честным, я не вижу причины безопасности, чтобы он не работал с ограничениями и соображениями, уже разработанными для фреймов.

С другой стороны, я знаю, что он не отвечает на ваш вопрос, но вы, возможно, захотите реализовать коммуникацию через сервер, что устранит зависимость от особенностей браузера (но это может быть менее опасно для вас, если вы только хотели поддержать IE 11).

+0

К сожалению, у IE есть проблема с разрешением '.postMessage' хотя окна. Вы должны использовать iframe с локального сервера, а второе приложение не поддерживает загрузку в iframe. –

+0

было бы очень приятно, чтобы Microsoft установила '.postMessage' –

+0

Это действительно так. :) –

1

Проблема заключалась в документе document.domain. Второй сайт не был в том же домене, что и первый. Как только я изменил полное доменное имя web1 и использовал document.domain = corp.local, проблема была решена.

Я пропустил исключение, которое бросает один из файлов javascript на document.domain.