Php 为iFrame设置用户代理
我想将iFrame的用户代理设置为iPhone。我发现这个代码: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=
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)解析页面,就没有办法了