使用不同的用户代理加载iframe内容

时间:2012-10-11 17:42:46

标签: html browser popup

是否可以使用不同的用户代理加载iframe?使用iframe的移动用户代理可以帮助我的应用将移动网站显示为悬停弹出窗口。

例如,只有当用户代理来自移动搜索结果页时,Google才会显示移动搜索结果页。

是否有任何替代解决方案或是否存在任何安全风险?

5 个答案:

答案 0 :(得分:7)

您可以使用JavaScript:

navigator.__defineGetter__('userAgent', function(){
    return 'foo' // customized user agent
});

navigator.userAgent; // 'foo'

但是,这只适用于部分浏览器。

请参阅此问题:Mocking a useragent in javascript?

答案 1 :(得分:6)

您可以创建一个代理,使用其他用户代理发出请求,然后通过代理加载iframe内容。

答案 2 :(得分:6)

首先,您必须创建一个更改用户代理字符串的函数:

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设置ID并定位ID而不是页面上的所有iframe元素。

答案 3 :(得分:1)

从我看来,你有两个解决方案:

  • 大多数网站不会针对每个用户代理进行呈现,他们只是识别用户代理并将用户重定向到移动视图,可以在不同的域下访问(http://m.youtube.com/,例如)或其他一些URL段。您只需检查他们的文档,获取他们的移动URL并将其加载到iframe中。

  • 另一个解决方案是将iframe指向您的应用程序,然后从后端获取文档。然后,您可以更改请求用户代理。

从HTML中无法影响请求标头。但你可以用javascript做到这一点。

答案 4 :(得分:-1)

我猜测一个人只能更改整个浏览器窗口或标签的用户代理信息。通过在不同时间加载iframe,可以在加载之间更改用户代理,以在一个页面上获得具有不同用户代理相关内容的两个不同的iframe。我用一个简单的示例页面对此进行了测试:

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

在Firefox 36.0.1中加载此页面后,我使用用户代理切换器扩展程序https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/来选择iPhone 3.0,然后单击&#34; Mobile Spoof&#34;链接重新加载该帧。那时我看到同一页面在每个iframe中显示不同的用户代理。我确定可以使用setTimeout()方法或可能通过事件处理程序自动加载页面加载或重新加载时序。我不确定如何自动化用户代理切换。我尝试了Aero Windwalker建议的setUserAgent功能,但是无法在Firefox 36或Chrome 41中使用它。我还想创建一个能很好地完成这一功能的页面。