2013-08-30 54 views
1

我有一個簡單的JavaScript代碼,告訴我我的網站是否在iframe中。在PHP中獲取Javascript變量

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

我怎樣才能從JavaScript的「iframe」變量,在PHP中?

我想要做這樣的事情:

<?php if ($iframe == "0") { 
//mysite for iframe 
} else { 
//mysite general 
} 
?> 

這可能嗎?

PS .:我也想成爲SEO。

非常感謝你!

+1

使用應該使用AJAX(或郵寄的形式在服務器上,或將其穿過URL參數) – karaxuna

+1

你可以在一個過渡頁面做這個測試,再後來加載正確的頁面 – DevZer0

+1

你可以用'GET'方法發送它.. – mehdi

回答

3

你可以簡單的使用:

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

你說,你想成爲SEO,所以你可以把一個規範的link 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; ?>"/> 
+0

謝謝sooooooooooooooooo多! –

+0

你們都非常歡迎! –

+0

如果url中已經有請求變量,這將不起作用。另外,SEO不介意背後的東西? ...所以不需要規範。 –

3

PHP是服務器端,Javascript是客戶端。您必須執行一些操作,例如將Ajax的值從Web瀏覽器(Javascript)傳輸到Web服務器(PHP)。

+0

謝謝,但我該怎麼做? –

+1

閱讀一些教程。在StackOverflow的一個答案中解釋太簡單了。 – ciruvan

2

由於Javascript是客戶端代碼,PHP是服務器端代碼,變量必須以某種方式傳遞給服務器。

有一些體面的做法,到目前爲止最常見的是GET和POST變量。那麼你可以在PHP中選擇它們,並用它做任何你想做的事情。

你可以通過這樣的變量:file.php EEEE = YYY然後獲取該變量與

$_GET['EEEE'] 
+0

謝謝,我知道,但我想做一些事情。 –

+0

但是,如何改變代碼在您的服務器上或訪問者的瀏覽器中運行? –

+0

它從我的訪問者瀏覽器運行。 –

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 
} 

或U可以使用window.location = url;進行頁面的變更網址。例如,您可以添加GET參數IFRAME = TRUE,然後用它在PHP中:?

if (isset($_GET['iframe'])) { 
    // here something 
} 
2

檢查了這一點:Ajax

這是如何做到的Ajax調用,一個簡單的例子如PHP運行在服務器端,而javscript是clientside。

所以,本質上,你的客戶端函數向服務器發送一個請求,然後服務器執行一個PHP實現的函數並返回結果。

+0

作爲一個方面說明:W3Schools不應該被認爲是學習資料的好來源。 – ciruvan

+0

它作爲進一步閱讀的起點 – LuigiEdlCarno

2

檢出$_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的目的,因爲這個變量不應該因爲安全原因而被信任。

0

PHP在服務器上運行,Javascript在客戶端上運行,因此您無法將PHP變量設置爲等於JavaScript變量而不將值發送到服務器。你可以,但是,設置一個JavaScript變量等於一個PHP變量:

<script type="text/javascript"> 
    var foo = '<?php echo $foo ?>'; 
</script> 

要發送JavaScript值到PHP你需要使用AJAX。使用jQuery,它會是這個樣子(最簡單的例子可能):

var variableToSend = 'foo'; 
$.post('file.php', {variable: variableToSend}); 

在您的服務器,你就需要接收在後發送的變量:

$variable = $_POST['variable']; 
3

由於訂單是:

-first解析PHP並將HTML發送到客戶端
- 然後客戶端運行HTML中的JavaScript腳本,它是HTML

要做你想做的事情將需要多個請求。

你可以做的是:

-Load是使用Ajax(第二請求)的HTML頁面的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? 
     } 
    } 
?> 
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();
的啓動和訪問使用
$_SESSION['value'];
變量還有另一種方法,即通過url傳遞該變量,例如「http://www.example.com/index.php?value=123456
在您的ind恩。PHP
$received_fr_url=$_REQUEST['value'];將值從URL