我有一个简单的javascript代码,它告诉我的网站是否在iframe中。
<script>
if ( window.self === window.top ) {
var iframe = '0';
} else {
var iframe = '1';
}
</script>
如何在php中从javascript获取"iframe"变量?
我想做这样的事情:
<?php if ($iframe == "0") {
//mysite for iframe
} else {
//mysite general
}
?>
这可能吗?
PS.:我也想成为SEO。
非常感谢!!!
您可以简单地使用:
<script>
if ( window.self === window.top ) {
window.location = window.location + '?iframe=0';
} else {
window.location = window.location + '?iframe=1';
}
</script>
你说你也想做SEO,所以你可以在<head></head>
:中放一个规范的链接rel
<?php
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
$canonical = 'http://' . $_SERVER['HTTP_HOST'] . $uri_parts[0];
?>
<link rel="canonical" href="<?php echo $canonical; ?>"/>
PHP是服务器端,Javascript是客户端。您必须执行类似Ajax的操作,才能将值从web浏览器(Javascript)传输到web服务器(PHP)。
由于订单为:
-首先解析PHP并将HTML发送到客户端
-然后客户端运行HTML 中的Javascript
做你想做的事需要多次请求。
你能做的是:
-加载一个HTML页面,该页面使用Ajax(第二个请求)将javascript变量发送到服务器。然后,服务器用XML响应Ajax请求,javascript应该已经知道如何处理这个答案了
-加载一个直接刷新自身的HTML页面,但将javascript变量作为请求变量(POST或GET)发送。类似于:
<?php
if (!isset($_REQUEST['iframe']) { // php checks if this it got the variable
// it is not given yet, so let javascript refresh and give the variable
?>
<script>
var url = window.location.href.split('#')[0];
var devider = url.indexOf('?') == -1 ? '?' : '&';
var hash = typeof window.location.href.split('#')[1] == 'undefined' ? '' : '#' + window.location.href.split('#')[1];
if ( window.self === window.top ) {
window.location.href = url + devider + 'iframe=0' + hash;
} else {
window.location.href = url + devider + 'iframe=1' + hash;
}
</script>
<?php
} else {
// it is given to php, lets do something with it...
if ($_REQUEST['iframe'] == 1) {
// ok, we're in an iframe. So what do you want to do?
} else {
// ok, we're not in an iframe. So what do you want to do?
}
}
?>
由于Javascript是客户端代码,PHP是服务器端代码,因此必须以某种方式将变量传递给服务器。
有几种不错的方法可以做到这一点,到目前为止,最常见的是GET和POST变量。然后你可以在php中获取它们,并用它做任何你想做的事情。
您可以传递这样的变量:file.php?EEEE=YYY,然后用获取该变量
$_GET['EEEE']
看看这个:Ajax
这是一个关于如何进行Ajax调用的简短示例,因为PHP是在服务器端运行的,而javscript是在客户端运行的。
因此,从本质上讲,您的客户端函数向服务器发送一个请求,然后服务器执行您的一个PHP实现的函数并返回结果。
检查$_SERVER['HTTP_REFERER']
,如果页面是从框架加载的,那么引用应该与框架的src不同。
快速测试:
main.html:
<iframe src="frame.php"></iframe>
frame.php
echo $_SERVER['HTTP_REFERER'];
访问main.html上的页面显示localhost/main.html
,而访问frame.php显示localhost/frame.php
。
这只是出于SEO目的,因为出于安全原因,不应该信任此变量。
看起来你做不到。但您可以使用ajax将其发送到服务器并加载请求的更改:
if ( window.self === window.top ) {
var iframe = '0';
} else {
var iframe = '1';
// here ajax requested that will load instructions about how to change a page
}
或者你可以使用window.location = url;
来更改页面的url。例如,您可以添加get参数吗?iframe=true,然后在php:中使用
if (isset($_GET['iframe'])) {
// here something
}
您可以做一件事,进行ajax调用并将该变量发送到php文件,如在您的javascript端==
jQuery.ajax({
type: 'get', // type of request either Get or Post
url: 'getValue.php', // Url of the file to set value in Session
data: "value="+iframe, //that value which you want to use in php
success: function(data)
{} });
在您的php端
<?php
session_start();
$val = $_GET["value"]; //receive data from ajax call
$_SESSION['value']=$val; //set that value in session
echo $_SESSION['value']; //way to access value which is stored in session
?>
现在,要在php中访问该值,只需在php文件的开头写入session_start();
并使用
访问该变量$_SESSION['value'];
还有另一种方法,即通过url传递该变量,例如"http://www.example.com/index.php?value=123456"
在您的index.php中$received_fr_url=$_REQUEST['value'];
将从url 中获取值