2014-03-27 83 views
1

我想一個javascript變量傳遞給打開一個新的窗口,但是如果我添加「_self」的名稱,該變量不會傳遞:Window.Open的Java腳本變量

這不會工作中,appointmentId未定義:

var w = window.open("../calendar/appointment.html","_self"); 
w.appointmentId = appt.id; 

這不工作:

var w = window.open("../calendar/appointment.html"); 
    w.appointmentId = appt.id; 

我如何可以通過使用_self名的變量,所以一個新的標籤/窗口未打開?

我傳遞的變量是巨大的。他們會佔用URL限制。對不起,我沒有提前指定。

由於

+0

是否可以接受,打開一個新標籤,並關閉該目前的? – Tibos

+0

不,不幸的是我無法打開一個新標籤頁。謝謝 – user2816352

回答

2

一種替代方法是通過可變的查詢字符串。

要重定向:

window.location = "../calendar/appointment.html?appt_id=" + appt.id 

在頁負載:

<script type="text/javascript"> 
    // http://stackoverflow.com/a/901144/1253312 
    function getParameterByName(name) { 
     name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); 
     var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"); 
     var results = regex.exec(location.search); 
     return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); 
    } 
    window.appointmentId = getParameterByName('appt_id'); 
</script> 
+0

我應該提到,我傳遞的變量是巨大的。他們會佔用URL限制。對不起,我沒有指定 – user2816352

1

一種替代的方式來做到這一點是通過window.location。例如:

window.location = "../calendar/appointment.html"; // this will send the user here in the current window 

另外,變量通常是由頁到頁經由使用查詢字符串(有時被稱爲GET變量)的通過。這些通常出現在問號後面。在你的情況,你可以傳遞變量是這樣的:

window.location = "../calendar/appointment.html?appointmentId=" + appt.id; 
// ../calendar/appointment.html?appointmentId=113 

你也可以傳遞變量的散列標記之後:

window.location = "../calendar/appointment.html#" + appt.id; 
// ../calendar/appointment.html#113 

如果你去的第二個選項,那麼你可以閱讀通過location.hash變量。如果通過查詢字符串傳遞給它,那麼你就可以提取可變後出來的URL,如圖所示這樣一個問題:

How can I get query string values in JavaScript?

+0

我應該提到,我傳遞的變量是巨大的。他們會佔用URL限制。對不起,我沒有指定 – user2816352

0

window.open可以採取3個參數

https://developer.mozilla.org/en-US/docs/Web/API/Window.open

您傳遞的第二個參數是創建的窗口的名稱。 這就是爲什麼你沒有在窗口內。

window.open(strUrl, strWindowName[, strWindowFeatures]) 

有關支持的功能的信息可以在給定的url中找到。

+0

我不關注。這有什麼關係。 –

0

您發佈的代碼不起作用的原因是因爲當您使用_self時,在加載新文檔之前,舊文檔會被清理乾淨。因此,沒有時間兩個人可以同步溝通。

This answer一個稍微不同的問題,但具有相同的根本原因給出了一些異步通信方式:

選項,你可以使用如下:

  • 使用哈希標籤添加它作爲一個參數(second.php#tmpstr = aaaaaa
  • 使用cookies(有一個不錯的jQuery cookie插件)
  • 將您的整個頁面移動到一個iFrame讚揚)並只重定向主框架。

注意,使用哈希標籤比使用其他的答案提出的查詢字符串稍微好一點,因爲你的變量不會對請求到服務器結束。

0

您可以使用瀏覽器的會話存儲。

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

重定向之前:

sessionStorage.setItem("appointmentId", appt.id); 

重定向:

window.location = "../calendar/appointment.html"; 

當appointment.html負載:

window.appointmentId = sessionStorage.getItem("appointmentId");