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

Aak*_*thy 16 html browser popup

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

例如,仅当用户代理来自移动用户代理时,Google才会显示移动搜索结果页面.

有没有其他解决方案或这个想法有任何安全风险?

Aer*_*ang 8

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

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
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你需要定位iframe元素:

setUserAgent(document.querySelector('iframe').contentWindow, 'Aakash Chakravarthy Mobile Agent');
Run Code Online (Sandbox Code Playgroud)

您还可以为iframe设置ID并定位ID而不是页面上的所有iframe元素.

  • 这应该可以在 Chrome 中使用吗?我无法让它设置 iframe 的 userAgent。但不会引发任何错误。 (2认同)
  • @philk 它不应该与任何具有增强安全功能的现代浏览器一起使用。 (2认同)

Flu*_*yte 7

你可以用JavaScript做到这一点:

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

navigator.userAgent; // 'foo'
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于选定数量的浏览器.

看到这个问题:在javascript中模拟一个useragent?

  • 嘿@Fluidbyte ......你能分享一个例子吗? (8认同)

Bil*_*oon 6

您可以创建一个代理,使用不同的用户代理发出请求,然后通过代理加载iframe内容.