Выполнение JavaScript изнутри iframe - PullRequest
2 голосов
/ 06 июня 2009

у меня есть:

  1. веб-сервер (сервер 1)
  2. Сервер приложений, на котором запущено какое-то существо устаревшего веб-приложения (сервер 2)
  3. iframe на сервере 1 вытягивает приложение с сервера 2

Моя проблема:

Устаревшее приложение использует проверку JS в своих формах. Когда пользователь пытается отправить неполную форму, появляется предупреждение, уведомляющее пользователя о том, что он является фиктивным. Конечно, это происходит сбой, когда приложение запускается внутри iframe, потому что сервер 1 и сервер 2 находятся в разных доменах.

Я попытался установить следующие директивы прокси на сервере 1:

ProxyPass /legacy_app http://server2.url/legacy_app
ProxyPassReverse /legacy_app http://server2.url/legacy_app

Теперь я могу обслуживать iframe с http://server1.url/legacy_app,, но все еще не могу выполнить javascript внутри этого iframe - я получаю те же ошибки безопасности / доступа, что и при запуске приложения на другой домен.

Могу ли я попробовать что-нибудь еще?

Ответы [ 4 ]

1 голос
/ 06 июня 2009

Как устаревшее приложение проверяет, заполнены ли поля? Простой JavaScript? Ajax?

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

Запуск следующего кода на моем локальном сервере Apache все еще выдает предупреждение onLoad, даже если страница находится на удаленном хосте:

<html>
    <body>
    <div>
        <iframe src="http://www.crowderassoc.com/javascript/alertbox.html" width="300" height="200">
    </div>
    </body>
</html>

Попробуйте скопировать приведенный выше код на страницу на сервере # 1 и посмотрите, есть ли окно предупреждения с этого удаленного сайта в iframe.

0 голосов
/ 07 июня 2009

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

В конечном итоге я сделал для этого проекта открытое локальное приложение во всплывающем окне с шириной 495 пикселей, загрузку внешнего приложения в главном (уже существующем) окне, изменение размера основного окна внешнего приложения до ширины экрана минус 495 пикселей, и расположив окна рядом на экране. Это дало конечному пользователю эффект, аналогичный тому, что я пытался сделать с фреймами, только это сработало.

Если это поможет, вот код, который я использовал из моего файла index.php:

// Manipulating the current window
window.location.href = 'http://www.someExternalApp.com'; // setting the page location.
window.name = 'legacyapp'; // setting the window name just the for heck of it.
moveTo(0,0); // moving it to the top left.

// Resizing the current window to what I want.
mainWindowWidth = screen.width - 495;
mainWindowHeight = screen.height; // Makes the window equal to the height of the users screen.
resizeTo(mainWindowWidth,mainWindowHeight); 

// function for opening pop-up
function openWin(){
    win2 = window.open(page,'',winoptions);
    win2.focus();
}

// internal app location (for use in pop-up)
page = 'someLocalApp.php';

// internal app Window Options (for pop-up)
winoptions = 'width=490,height='+mainWindowHeight+',top=0,left='+mainWindowWidth+'leftscrollbars=1,scrolling=1,scrollbars=1,resizable=1,toolbar=0,location=0,menubar=0,status=0,directories=0';

// Opens the local app pop-up
openWin();
0 голосов
/ 06 июня 2009

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

Устаревший сервер принадлежит клиенту, и у нас нелегкий доступ к нему, но, глядя на их JS, похоже, что они делают какое-то обнаружение между сайтами / кадрированием - стоит дальнейшего изучения.

0 голосов
/ 06 июня 2009

Вы пытались разместить скрипт внутри файла .js, размещенного на сервере # 1, но у которого заканчивается iframe (ссылка на сервер № 2)?

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

Сам не пробовал, но, полагаю, именно так я слышал о такой проблеме, которую можно обойти. Я знаю, что это метод, который использует Google Analytics - вы должны запросить файл .js с серверов Google, но, как только он там, он имеет доступ к браузеру.

...