Подтвердить что ты не робот

Загружать содержимое iframe с помощью другого пользовательского агента

Можно ли загрузить iframe с помощью другого пользовательского агента? Использование мобильного агента пользователя для iframe поможет моему приложению показывать мобильные сайты как всплывающие окна.

Например, Google показывает страницу результатов мобильного поиска только в том случае, если пользовательский агент является мобильным.

Есть ли альтернативные решения или есть ли какие-либо риски безопасности, связанные с этой идеей?

4b9b3361

Ответ 2

Вы можете создать прокси-сервер, который обрабатывает запросы с другим пользовательским агентом, а затем загружать содержимое iframe через прокси-сервер.

Ответ 3

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

function setUserAgent(window, userAgent) {
    if (window.navigator.userAgent != userAgent) {
        var userAgentProp = { get: function () { return userAgent; } };
        try {
            Object.defineProperty(window.navigator, 'userAgent', userAgentProp);
        } catch (e) {
            window.navigator = Object.create(navigator, {
                userAgent: userAgentProp
            });
        }
    }
}

Затем вам нужно настроить таргетинг на элемент iframe:

setUserAgent(document.querySelector('iframe').contentWindow, 'Aakash Chakravarthy Mobile Agent');

Вы также можете установить идентификатор в iframe и указать идентификатор вместо всех элементов iframe на странице.

Ответ 4

Из того, что я вижу, у вас есть два решения:

  • Большинство веб-сайтов не отображаются для каждого агента пользователя, они просто распознают пользовательский агент и перенаправляют пользователя на мобильный вид, доступный в другом домене (http://m.youtube.com/, например) или какой-либо другой сегмент URL. Вам просто нужно проверить их документацию, получить свой мобильный URL и загрузить его в iframe.

  • Другое решение - указать Iframe для вашего приложения, а затем извлечь документ из вашего бэкэнд. Затем вы можете изменить агент пользователя запроса.

Из HTML невозможно повлиять на заголовки запросов. Но вы можете сделать это с помощью javascript.

Ответ 5

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

<!DOCTYPE html> <html> <body>
<iframe src="http://whatsmyuseragent.com/" name="mobile" width="60%" height="400px"></iframe>
<a href="#" onclick="location.href='http://whatsmyuseragent.com/'; return false;" target="mobile">Mobile Spoof</a>
<iframe src="http://whatsmyuseragent.com/" name="pc" width="60%" height="400px" ></iframe>
</body> </html>

После загрузки этой страницы в Firefox 36.0.1 я использовал расширение Switcher User Agent https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/, чтобы выбрать iPhone 3.0, а затем щелкнул ссылку "Мобильный Spoof" для перезагрузки этого фрейма. В этот момент я увидел ту же страницу с другим пользовательским агентом в каждом iframe. Я уверен, что загрузка страницы или перезагрузка может быть автоматизирована с помощью метода setTimeout() или, возможно, с помощью обработчиков событий. Я не уверен, как автоматизировать переключатель агента пользователя. Я попробовал функцию setUserAgent, предложенную Aero Windwalker, но не смог заставить ее работать в Firefox 36 или Chrome 41. Я также хотел бы создать страницу, которая делает это хорошо.