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

Html 使用不同的用户代理加载iframe内容,html,browser,popup,Html,Browser,Popup,是否可以使用不同的用户代理加载iframe??为iframe使用移动用户代理将有助于我的应用程序将移动站点显示为悬停弹出窗口 例如,只有当用户代理来自移动代理时,谷歌才会显示移动搜索结果页面 是否有其他解决方案或此想法是否涉及任何安全风险???您可以创建一个代理,使用不同的用户代理发出请求,然后通过代理加载iframe内容。您可以使用JavaScript: navigator.__defineGetter__('userAgent', function(){ return 'foo' /

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

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


是否有其他解决方案或此想法是否涉及任何安全风险???

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

您可以使用JavaScript:

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

navigator.userAgent; // 'foo'
但是,这只适用于一定数量的浏览器


请看这个问题:

根据我的了解,您有两种解决方案:

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

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


从HTML不可能影响请求头。但是你可以用javascript来实现

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

函数setUserAgent(窗口,userAgent){
if(window.navigator.userAgent!=userAgent){
var userAgentProp={
get:function(){
返回用户代理;
}
};
试一试{
定义属性(window.navigator、'userAgent',userAgentProp);
}捕获(e){
window.navigator=Object.create(navigator{
userAgent:userAgentProp
});
}
}
}
然后您需要以iframe元素为目标:

setUserAgent(
document.querySelector('iframe').contentWindow,
“Aakash Chakravarthy移动代理”
);

您还可以为iframe设置一个ID,并以该ID为目标,而不是页面上的所有iframe元素。

我猜只能更改整个浏览器窗口或选项卡的用户代理信息。通过在不同时间加载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中加载此页面后,我使用User Agent Switcher扩展选择iPhone 3.0,然后单击“Mobile Spoof”链接重新加载该框架。在那一点上,我看到相同的页面在每个iframe中显示不同的用户代理。我确信页面加载或重新加载计时可以通过setTimeout()方法自动完成,也可以通过事件处理程序自动完成。我不知道如何自动化用户代理切换。我尝试了Aero Windwarker建议的setUserAgent功能,但在Firefox 36或Chrome 41中无法运行。我还想创建一个能很好地完成这项工作的页面。

我认为您必须使用服务器代理该页面。如果您使用一些简单的PHP,您可能会发送假标题。我如何使用它加载带有所需用户代理的iframe src??不知道如何启动Granted您没有解决仅源代码问题,您可以将其分配给iframe对象。嘿@Fluidbyte。。。你能分享一个例子吗?很好的解决方案,虽然我不得不将document.querySelector改为document.getelementbyidi,但这在Chrome中应该可以工作吗?我无法设置iframe的userAgent。但是没有抛出错误。@philk它不应该与任何具有增强安全功能的现代浏览器一起使用。这在Windows Google Chrome版本78.0.3904.108(官方版本)(64位)中对我不起作用@Ryan它不应该与任何具有增强安全功能的现代浏览器一起使用。听起来很聪明,可能是解决跨来源问题的唯一方法。你能给出一个关于这个问题的SO问题的链接吗?我没有找到合适的关键字来获得好的搜索结果。。。(注:刚刚想起cors anywhere,我将尝试使用它)@brasofilo我为我的个人小开发服务器(发布为2.7.0版)添加了功能,并使其与代理部分中记录的最后一个代码块如期工作: