Php 为iFrame设置用户代理

Php 为iFrame设置用户代理,php,javascript,iframe,agent,Php,Javascript,Iframe,Agent,我想将iFrame的用户代理设置为iPhone。我发现这个代码: navigator.__defineGetter__('userAgent', function(){ return 'foo' // customized user agent }); navigator.userAgent; // 'foo' 我想知道如何将其与我的代码一起插入: PHP/HTML: <div class="holder"> <form action="page.php" method=

我想将iFrame的用户代理设置为iPhone。我发现这个代码:

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

navigator.userAgent; // 'foo'

我想知道如何将其与我的代码一起插入: 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>

http://

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

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


编辑

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

你所看到的对你来说将是一个很大的问题。有几个原因:

  • 没有任何桌面浏览器能够完美地复制iOS浏览器行为。iOS版Safari是苹果公司定制的WebKit版本,而且(理论上)没有其他浏览器,即使是WebKit浏览器,也不会有同样的表现。你必须考虑触摸事件、苹果自己的调整、方向变化等

  • 如果您使用的是
    iframe
    解决方案,则无法发送一个标头,表明您正在iframe中使用iPhone。(有一个解决办法,请阅读下面的第2点。)

  • 可以做什么

  • 现代网站,而不是嗅探用户代理头(浏览器标识符),只是简单地响应和适应屏幕的宽度。这对您很有帮助,因为这些网站不依赖用户代理标题来识别浏览器,这样的网站只需根据iframe的任何尺寸调整设计即可。如果你采用这种简单的方法,你最终会得到这样的结果

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


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

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

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


    编辑

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

    你所看到的对你来说将是一个很大的问题。有几个原因:

  • 没有任何桌面浏览器能够完美地复制iOS浏览器行为。iOS版Safari是苹果公司定制的WebKit版本,而且(理论上)没有其他浏览器,即使是WebKit浏览器,也不会有同样的表现。你必须考虑触摸事件、苹果自己的调整、方向变化等

  • 如果您使用的是
    iframe
    解决方案,则无法发送一个标头,表明您正在iframe中使用iPhone。(有一个解决办法,请阅读下面的第2点。)

  • 可以做什么

  • 现代网站,而不是嗅探用户代理头(浏览器标识符),只是简单地响应和适应屏幕的宽度。这对您很有帮助,因为这些网站不依赖用户代理标题来识别浏览器,这样的网站只需根据iframe的任何尺寸调整设计即可。如果你采用这种简单的方法,你最终会得到这样的结果

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


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

    您无法从网站内更改用户代理。为什么要尝试这样做?您无法使用JavaScript更改用户代理。JavaScript非常有限,并且依赖于浏览器。因此,一旦浏览器窗口(比如Chrome)解析了一个页面,就无法告诉它“嘿,从现在起你就是IE9了,请相应地行动”。你不能在网站内更改用户代理。你为什么要这样做?你不能使用JavaScript更改用户代理。JavaScript非常有限,并且依赖于浏览器。因此,一旦浏览器窗口(比如Chrome)解析页面,就没有办法了