1. 程式人生 > >jsp頁面點選button彈出新視窗但會顯示session已過期或者是未登入

jsp頁面點選button彈出新視窗但會顯示session已過期或者是未登入

其實是因為新開一個瀏覽器視窗(不是標籤頁)是會建立一個新的session id的,瀏覽器的session 管理機制是,

A使用者開啟一個視窗第一個訪問伺服器的時候後面會帶一個引數sessionid,而這時候這個session id 是空的,

伺服器通過getsession id 拿到一個空值,就會去建立一個session id 給user,然後一併response 給瀏覽器端使用者A,

如果再次在當前視窗訪問伺服器,這時候瀏覽器就會把剛剛獲得的session id 以引數的形式再傳給伺服器,伺服器會認為是同一個會話。

而這時候如果再新開一個視窗(等於新開了一個程序,資料不能跨程序訪問),這時候瀏覽器傳給伺服器端的session id 是空的。

這也就是為什麼如果window.open 如果新開了一個視窗會要求再次登入的原因。

而開啟一個新標籤頁,實際上還是在同一個視窗,因此是同一個session。

 我們知道,在<a>標籤中通過設定target="_blank"就可以實現開啟新標籤的效果。但有時候我們需要通過Javascript來開啟新標籤,那麼怎麼

實現呢?方法如下:

window.open("http://www.test.com");

或者:

window.open("http://www.test.com", "_blank"); //注意第二個引數

有人或許會覺得奇怪,window.open()不是用來開啟新視窗的麼,怎麼還可以開啟新標籤啊?其實只有在window.open()中指定了第三個屬性

(即新視窗的特徵)時瀏覽器才會開啟新的視窗,在沒指定第三個屬性時只會在當前視窗開啟新的標籤(在IE中,如果要開啟的URL與當前

頁面URL不屬於同一個主域名則開啟新視窗;在Chrome中,如果window.open()函式不是被滑鼠鍵盤事件呼叫的,而是頁面直接呼叫或通過

定時器等呼叫的,則開啟新視窗而非標籤)。此外,下面適用於<a>標籤的target引數同樣適用於window.open()的name引數:

注意事項:

1.在IE中,如果要開啟的域名和當前域名不屬於同一個主域名,則會在新的視窗中開啟(<a>標籤也是這樣)。

2. 在Chrome中,如果window.open()函式不是被滑鼠鍵盤事件呼叫的,而是頁面直接呼叫或通過定時器(包括滑鼠鍵盤觸發的定時器)等

呼叫的,則開啟新視窗而非標籤。

2.在新視窗或新標籤中,window.open()的_parent和_top引數是無效的(只有在frame中時有效)。

3.framename引數可以設定為當前頁面內的frame的name值、新視窗的name值,或者新標籤的name值




var el = document.createElement("a");
document.body.appendChild(el);
el.href = url; //url 是你得到的連線
el.target = '_new'; //指定在新視窗開啟
el.click();
document.body.removeChild(el);

最近在使用window.open時忽略了一個細節問題:window.open新開啟一個視窗,但是有時卻是新開啟一個視窗有時開啟一個新標籤頁。雖然對一般的需求來說,這個兩種情況都無所謂,但是對於那種有強烈區分的需求來說還是要注意的。那麼怎麼會出現這種不同的開啟情況呢,這要從window.open方法的用法和不同瀏覽器來區分。

 1、window.open的用法容易忽視的細節

 window.open方法有三個引數:  

window.open(url, [name], [configuration])

其中:

  • url, 為要新開啟頁面的url
  • name,為新開啟視窗的名字,可以通過此名字獲取該視窗物件
  • configuration,為新開啟視窗的一些配置項,比如是否有選單欄、滾動條、長高等等資訊

例如,新開啟一個沒有選單欄、標題欄、工具欄,但是有滾動條、狀態列、位址列且可伸縮視窗的方法呼叫如下:

window.open("index.html","newWindow","menubar=0,scrollbars=1, resizable=1,status=1,titlebar=0,toolbar=0,location=1");

以上只是簡要描述了window.open的方法,但是這個方法容易忽略的地方就是:新開啟視窗名字可以是自定義的值,此外還可以是以下幾個值,與超連結a的target屬性值相同

視窗name值 描述
_blank 預設的,在新視窗開啟連結的url
_self 在當前視窗開啟連結url
_parent 在父視窗開啟連結url
_top 在頂級視窗開啟url
framename 在指定的框架中開啟連結url

2、window.open開啟新視窗還是開啟新標籤頁

 呼叫window.open是開啟新視窗,還是開啟新標籤頁,其實沒有什麼要緊關係,但是有些需求在這方面有很強的意願時,那就得區分一下了。具體的開啟什麼還是根據具體情況來定的,以下結論是經過本人測試得出的,若有不正確的地方,請大家批評指正。

1、window.open(url)或者window.open(url, name),其中name為_blank

  • 標準瀏覽器、IE9+是新標籤開啟連結url
  • ie6-8是新視窗開啟連結url

2、window.open(url, name),其中name為非_blank的其他4個值

  此時會會在指定視窗或者frame開啟連結url

3、window.open(url, name, configration)

  只要配置了configration,所有瀏覽器都是新視窗開啟連結url

3、使用window.open方法開啟的視窗可能被攔截的替代方案

 現在有些瀏覽器為了安全起見,可能會阻止window.open開啟的連結url,不管是以標籤還是以視窗開啟。這時可能需要使用者進行瀏覽器設定允許彈新頁,讓使用者設定瀏覽器是極不可取的做法,尤其像電商類網站,那麼有其他替代方案呢?

答案當然是有的,利用超連結開啟的url是不會被攔截的可以實現這一點。具體做法是結合事件手動觸發機制。下面是  HTML:模擬連結被按下,在新標籤頁開啟頁面,不使用window.open(可能被攔截) 這篇部落格給的一個簡單的例項,這篇文章給出的事件分發機制是針對標準瀏覽器的:

複製程式碼
html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Title</title>

    <script src="jquery.js"></script>
    <script type="text/javascript">
    $(function() {
        $("#btn").click(function() {
            //var a = $('a')[0];
            var a = $("<a href='http://www.apple.com' target='_blank'>Apple</a>").get(0);
            
            var e = document.createEvent('MouseEvents');
            e.initEvent( 'click', true, true );
            a.dispatchEvent(e);
        });
    });
    
    </script>
</head>

<body>
    <input type="button" value="Go to Apple" id="btn">
</body>
</html>
複製程式碼

相關推薦

jsp頁面button出新視窗顯示session過期或者登入

其實是因為新開一個瀏覽器視窗(不是標籤頁)是會建立一個新的session id的,瀏覽器的session 管理機制是, A使用者開啟一個視窗第一個訪問伺服器的時候後面會帶一個引數sessionid,而這時候這個session id 是空的, 伺服器通過getsession

如何按鈕出新視窗,輸入資料後返回並重新整理頁面?(C#程式碼)

namespace ShowModalTest{ /// <summary> /// WebForm1 的摘要說明。 /// </summary> public class WebForm1 : System.Web.UI.Page {  protected System.Web.UI

MFC基於對話方塊上插入MENU選單欄並選單出新視窗

一、建立基於對話方塊的應用程式框架        1.選擇選單項檔案->新建->專案,彈出“新建專案”對話方塊。        2.直接選擇“MFC應用程式”或左側面板中模板的Visual C++下選擇MFC,中間視窗中選擇MFC應用程式,然後在下面編輯框中鍵入

QT+VS按鈕出新視窗的實現

1.建立主工程: 新建一個Qt工程作為主工程,取名為newWidgetDemo; 2.建立新視窗: project->右鍵->新增->類->Qt5 Classes->Qt5GuiClass->新增->給新視窗起名為myWidget

jsp頁面出iframe框,並傳值到後臺

 function openwindow(id,endDate){                     layer.open({                         type: 2,                         title: false,                  

Selenium button 出現Windows視窗時候SeleniumHang住!!!

1. 問題描述 使用Selenium webDriver 點選頁面一個按鈕,出現Print windows視窗,這時候 程式會掛住在Click操作上. 解決辦法: 使用執行緒結合AutoItX.jar去關閉windows視窗,這樣Selenium就會繼續執行下面的測試指令碼

關於JSP頁面按鈕沒反應,方法沒有執行的檢查

          本人前端知識屬於菜鳥級的,不喜勿噴。。前不久,在除錯一個頁面的時候,點選頁面上的一個按鈕,按鈕繫結的事件並沒有執行。好奇怪,以為是方法名寫錯了,檢查一下完全一樣啊。好鬱悶,網上有說是onclick和onClick的區別,但是還是不行啊。經過一番摸索,原來

jsp頁面頁籤自動重新整理解決方案

問題:在一個projectInfoMain.jsp的介面定義了多個頁籤,怎麼實現在一個頁籤的jsp頁面儲存完以後點選每個頁籤時自動重新整理改介面。 解決方案:可以在每次點選頁籤時,修改頁籤的url地址,使它再次向伺服器傳送請求,以實現自動重新整理的功能 具體解決方案:

【Unity 3D 5.6版本使用(3)】物體視窗顯示狀態

emmm直接看程式碼 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ShowWindow : MonoBehavio

【android開發】使用PopupWindow實現頁面頂部出下拉選單

沒有太多花樣,也沒有很複雜的技術,就是簡單的PopupWindow的使用,可以實現點選彈出一個自定義的view,view裡可以隨便設計,常用的可以放一個listview。 demo中我只是一個點選展示,簡單的使用了fade in out的動畫效果,也沒有精美的圖片資源,

form表單下button按鈕提交後頁面重新整理問題解決

button,input type=button按鈕在IE和w3c,firefox瀏覽器區別 當在IE瀏覽器下面時,button標籤按鈕,input標籤type屬性為button的按鈕是一樣的功能,不會對錶單進行任何操作。 但是在W3C瀏覽器,如Firefox下就需要注意了,button標籤按鈕會提

連結出一個DIV層視窗

做裝置介紹頁面的時候,發現每個裝置點選檢視詳情都需要連結一個新的頁面,這樣比較影響網頁瀏覽的效率和舒適度,所以想用彈窗的形式在當前頁面展示詳情。彈出的視窗要固定在瀏覽器視窗的中間位置,我採用了fixed固定佈局。 <!--HTML--> <body style="backg

Button實現開啟新視窗跳轉並且設定視窗大小並居中

1.在template中建立click事件 <div class="glyphicon glyphicon-plus-sign" title="點選我新增專案" @click="createnewproject"></div> 2.在methods中建立方法 m

jsp 頁面中點刪除按鈕後出確認對話方塊

<script type="text/javascript" language="javaScript"> function del(url){ if(confirm("確定要刪除該題目?")){ window.location.href = "delsele

Button出一個MessageBox, 背後發生了什麼

思考一個最簡單的程式行為:我們的Dialog上有一個Button, 當用戶用滑鼠點選這個Button時, 我們彈出一個MessageBox。 這個看似簡單的行為, 誰能說清楚它是如何執行起來的,背後究竟發生了什麼?  下面是我個人嘗試的解答: (1)我們的滑鼠點選事件到達裝置的

jsp 模擬按鈕,button,連結到a標籤,是a標籤的地址跳轉

<button id="btn"></button><a href="www.baidu.com" id="link">link</a><script>document.getElementById("btn").

jsbutton跳轉到另一個頁面

點選按鈕怎麼跳轉到另外一個頁面呢?我們在網站製作中可能是需要的,因為有時我們需要做這樣的效果,尤其是將按鈕做成一個圖片,而點選圖片要跳轉到新的頁面時,怎麼做到呢? 這樣的效果可以:onclick="window.location='新頁面'" 來實現。 1.在原來的窗體中直接跳轉用 程式碼如下 window

解決IE關閉頁面時連續出新視窗的bug

這個問題長期以來一直一個隨機出現,又十分難以重現和定位。幾經努力之後定位到了,在一個帶有複雜的內嵌iframe的頁面,當內嵌的iframe正在渲染的過程中關閉IE 瀏覽器的時候,會比較容易發生這個問題。比較容易猜想的是IE在關閉iframe的時候出現了某些問題。猜測是幾個iframe相互有通過top的指令碼呼

安卓-通過Button跳轉不同的頁面

最近在做一個安卓前端,剛開始接觸安卓(菜鳥一隻),啥都不懂,就通過記筆記的方法來了解安卓吧。在自己的xml的檔案中定義一個Button。如下:<Button android:id="@+id/btnOne" android

jsbutton按鈕跳轉到另一個新頁面

點選按鈕怎麼跳轉到另外一個頁面呢?我們在網站製作中可能是需要的,因為有時我們需要做這樣的效果,尤其是將按鈕做成一個圖片,而點選圖片要跳轉到新的頁面時,怎麼做到呢? 這樣的效果可以:onclick="window.location='新頁面'" 來實現。 1.在原來的窗體中直接跳轉用 程式碼如下 window