1

我有一个简单的 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。

太感谢了!!!

4

8 回答 8

3

PHP是服务器端,Javascript是客户端。您必须执行 Ajax 之类的操作才能将值从 Web 浏览器 (Javascript) 传输到 Web 服务器 (PHP)。

于 2013-08-30T07:58:53.793 回答
3

您可以简单地使用:

<script>
    if ( window.self === window.top ) { 
            window.location = window.location + '?iframe=0';
    } else { 
            window.location = window.location + '?iframe=1';
    }
</script>

你说你也想成为 SEO,所以你可以把一个规范的链接 rel 放在<head></head>

<?php
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
$canonical = 'http://' . $_SERVER['HTTP_HOST'] . $uri_parts[0];
?>

 <link rel="canonical" href="<?php echo $canonical; ?>"/>
于 2013-08-30T08:24:32.097 回答
3

由于顺序是:

-首先解析 PHP 并将 HTML 发送到客户端-然后
客户端运行 HTML 中的 Javascript

做你想做的事将需要多个请求。

你可以做的是:

- 加载使用 Ajax(第二个请求)将 javascript 变量发送到服务器的 HTML 页面。然后服务器使用 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?
        }
    }
?>
于 2013-08-30T08:10:42.360 回答
2

由于 Javascript 是客户端代码而 PHP 是服务器端代码,因此必须以某种方式将变量传递给服务器。

有一些不错的方法可以做到这一点,目前最常见的是 GET 和 POST 变量。然后你可以在 php 中选择它们并用它做任何你想做的事情。

你可以像这样传递变量:file.php?EEEE=YYY 然后用

$_GET['EEEE']
于 2013-08-30T07:58:57.390 回答
2

看起来你不能。但是您可以使用 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
}
于 2013-08-30T08:00:05.323 回答
2

看看这个:阿贾克斯

这是一个关于如何进行 Ajax 调用的简短示例,因为 PHP 在服务器端运行,而 javscript 在客户端。

因此,本质上,您的客户端函数向服务器发送一个请求,然后服务器执行其中一个 PHP 实现的函数并返回结果。

于 2013-08-30T08:01:57.727 回答
2

看看$_SERVER['HTTP_REFERER'],如果页面是从框架加载的,那么引用应该与框架的 src 不同。

快速测试:

主.html:

<iframe src="frame.php"></iframe>

框架.php

echo $_SERVER['HTTP_REFERER'];

访问 main.html 显示的页面,localhost/main.html同时访问 frame.php 显示localhost/frame.php

这只是出于 SEO 的目的,因为出于安全原因,不应信任此变量。

于 2013-08-30T08:03:31.397 回答
0

您可以做一件事进行 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();
访问​​该变量,即通过 url 传递该变量,例如“ http://www.example.com/index.php?value =123456 " 在您的 index.php 中将从 url 获取值
$_SESSION['value'];


$received_fr_url=$_REQUEST['value'];

于 2013-08-30T09:19:08.877 回答