在PHP中获取一个Javascript变量


Get a Javascript variable in PHP

我有一个简单的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 中获取值