为iFrame设置用户代理

时间:2013-02-09 12:06:07

标签: php javascript iframe agent

我想将iFrame的用户代理设置为iPhone。我找到了这段代码:

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

navigator.userAgent; // 'foo'

from here

我想知道如何使用我的代码插入: PHP / HTML:

<div class="holder">
<form action="page.php" method="post">
<label>
http://
</label>
<input type="text" name="url" value="<? echo $_POST['url']; ?>" />
<input type="submit" value="Anschauen" />
</form>
</div>
<div class="iphone">  
<iframe src="<? echo 'http://'. $_POST['url']; ?>"></iframe>
</div>

如果上述脚本不起作用,是否有可能使用AJAX或cURL,如果是,任何人都可以为我的代码提供示例,因为我不知道如何编写AJAX或cURL。

1 个答案:

答案 0 :(得分:4)

您无法从PHP端设置用户代理字符串以影响iframe。用户代理标头是浏览器在每个请求上发送的客户端标识符。某些浏览器允许您手动修改它,但不能用于单个框架。

您找到的解决方案可能毫无用处,因为它使用JavaScript来修改用户代理字符串。此修改的结果不会发送到返回iframe内容的服务器。


修改

OP在评论中提到他想构建一个iframe来预览“iPhone模式”中的网站。

你所看到的对你来说会有很多问题。有几个原因:

  1. 没有桌面浏览器能够完美复制iOS浏览器行为。 iOS版本的Safari是Apple的自定义WebKit构建,并且(理论上)没有其他浏览器,甚至WebKit构建器也会表现相同。您必须考虑触摸事件,Apple自己的调整,方向更改等。

  2. 如果您要使用iframe解决方案,则无法发送标识您在iframe中使用iPhone的标头。 (有一种解决方法,请参阅下面的第2点。)

  3. 可以做什么

    1. 现代网站,而不是嗅探用户代理标题(浏览器标识符)只是响应和适应屏幕的宽度。这对您有所帮助,因为这些网站不依赖于用户代理标头来识别浏览器,这样的网站只会使设计适应iframe所具有的任何维度。在你采用这种简单的方法时,你最终会得到类似iPhone 4 Browser Simulator的内容。

    2. 您可以使用xHR发出AJAX请求。 xHR允许您修改随请求一起发送的标头, 允许您change the User-Agent header。我没有对它进行测试,所以我不知道是否允许在xHR中更改用户Agnet但是可能值得一试。
      然后返回响应,您可以将该输出放在iframe中。不幸的是,返回的内容中的链接很可能会被破坏,因为它们将不再附加到URL。您必须拥有自己的脚本来浏览响应内容并修复链接。理想情况下,您的脚本也必须截获所有点击,以便使用iPhone的用户代理标头发出另一个xHR请求。

    3. 正如您所看到的,有一种方法可以进行某种模拟(而不是模拟),但您必须依赖网站的响应能力或创建一个脚本来请求具有自定义用户代理标头的页面(假设它是允许的。)