最近工做中有個需求:點擊按鈕時打開一個頁面,此處取名爲page1,打開頁面的前提條件是若是有人已經打開過page1頁面而且沒有關閉時請求ajax判斷session是否爲空,若是爲空則將用戶名和文檔id存入session,若是不爲空則提示已有人打開此頁面。html
$(function(){ addassbutton('_FORM_PF_sp_f22860'); function addassbutton(textid){ $('#'+textid).after("<br/><input type='button' id='visualButton' value='' style='background:url(/fileftp/2013/05/2013-05-13/U32P4T47D26207F980DT20130513164525.gif) no-repeat; border:0px;width:108px;height:28px;padding-bottom:16px;margin-left:5px;'/>"); } $("#visualButton").bind('click',function(){ var ztselected = $("select[name=_FORM_PF_sp_f22820] option:selected").val(); if(ztselected==''){ alert("請先選擇專題名稱"); return; }else{ if(did_gspsass !==''){ $.ajax({ //async:false, url: '/api/checkSess/' + username_gspsass + '/' + did_gspsass, type: 'get', dataType: 'json', success:function(res){ console.log(res); console.log(res.username === username_gspsass); if(res.session==='true'){ openWin(); }else{ //alert("不容許多人同時操做,緊急狀況請聯繫<strong>" + res.username + "</strong>"); alert("不容許多人同時操做"); } } }) }else{ openWin(); } } }); });
function openWin(){
window.open('/gsps/visualization/visual.html','newwindow','height=800,width=1500,top=0,left=0,toolbar=no,menubar=no,scrollbars=yes, resizable=yes,location=no, status=no');
}ajax
點擊"可視化編輯"按鈕時先請求ajax時會出現window.open彈窗被chrome攔截的問題(參考1連接),緣由:因爲window.open的執行時機,window.open在ajax中執行,不管是同步仍是異步,等待ajax返回結果都須要必定的時間,當獲得返回的結果真後再執行window.open時,chrome認爲是不友好的行爲,非用戶主動點擊打開彈窗),因此會被屏蔽。chrome
解決方法一:容許被阻止的頁面打開,json
解決方法二:先打開一個空白頁,而後等ajax回來的結果,拿到連接地址,替換掉以前空白頁的url(參考2連接)。segmentfault
注意: 使用解決方法一時,用戶第一次打開頁面newwindow(不關閉),當用戶再次點擊按鈕觸發時沒有反應,由於newwindow已經打開,可是須要用戶手動去找打開的newwindow,不能自動彈出已經打開的頁面,容易讓用戶覺得程序出現了問題,不利於用戶體驗,如如有解決方法,請在評論區留言,多謝!!!api
使用解決方法二時,用戶第一次打開頁面newwindow(不關閉),當用戶再次點擊按鈕觸發時會彈出一個空白頁覆蓋newwindow,暫未找到解決方法,如如有解決方法,請在評論區留言,多謝!!!sass
不調用ajax時,代碼以下:session
點擊按鈕時會打開visual.html頁面(名稱爲page1),而且再次點擊按鈕時打開的仍是page1頁面,會自動彈出;異步
參考:一、http://blog.csdn.net/xufaxi/article/details/6647952async
二、https://segmentfault.com/q/1010000006760018/a-1020000006765547