【问题标题】:Setting a User Agent for an iFrame为 iFrame 设置用户代理
【发布时间】:2013-01-25 03:03:44
【问题描述】:

我想将 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。

【问题讨论】:

  • 您无法从网站内更改用户代理。
  • 你为什么要这样做?
  • 您无法使用 JavaScript 更改用户代理。
  • Javascript 非常有限并且依赖于浏览器。因此,一旦浏览器窗口(例如 Chrome)解析了一个页面,就没有办法告诉它“嘿,从现在开始你是 IE9,请按时行事”。

标签: php javascript iframe agent


【解决方案1】:

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

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


编辑

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

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

【讨论】:

  • 您是要在上述 iframe 中显示的网站的所有者吗?
  • 不,我想构建一个 iframe 来在 iPhone 中预览网站。
猜你喜欢
  • 2016-03-12
  • 1970-01-01
  • 2018-05-01
  • 2013-01-17
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多