1

I would like to set a User Agent for an iFrame as iPhone. I found this code:

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

navigator.userAgent; // 'foo'

from here.

I am wondering how to insert this with my code: 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>

If the above script doesn't work is there any possibility to use AJAX or cURL, if yes could anyone give an example for my code, since I don't know how to code AJAX or cURL.

4

1 回答 1

3

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

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


编辑

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

您正在查看的内容对您来说将是一个很大的问题。几个原因:

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

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

可以做什么

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

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

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

于 2013-02-09T13:50:22.523 回答