好久沒有寫過js了,近日項(xiàng)目中,有個(gè)需求就是,新打開窗口頁面,對(duì)于新窗口我總結(jié)以下2點(diǎn)
1.最基本的彈出窗口代碼window.open()這個(gè)也相對(duì)簡單,大家都調(diào)用過,建義大家用絕對(duì)路徑(http://),以下是參數(shù)
window.open 彈出新窗口的命令;
‘page.html’ 彈出窗口的文件名;
‘newwindow’ 彈出窗口的名字(不是文件名),非必須,可用空”代替;
height=100 窗口高度;
width=400 窗口寬度;
top=0 窗口距離屏幕上方的象素值;
left=0 窗口距離屏幕左側(cè)的象素值;
toolbar=no 是否顯示工具欄,yes為顯示;
menubar,scrollbars 表示菜單欄和滾動(dòng)欄。
resizable=no 是否允許改變窗口大小,yes為允許;
location=no 是否顯示地址欄,yes為允許;
status=no 是否顯示狀態(tài)欄內(nèi)的信息(通常是文件已經(jīng)打開),yes為允許;
用這個(gè)方法在瀏覽器中,基本都會(huì)被屏蔽,大家可以通過
var val = window.open(url),返回值來判斷
if(!val){
這里表示被屏蔽了,沒有成功,。大家可以在這里加個(gè)相對(duì)應(yīng)的業(yè)務(wù)代碼。我當(dāng)時(shí)如果處理是如果屏蔽了,
用document.location.href=url內(nèi)部跳轉(zhuǎn)。
}
2、以上方法最基本的問題沒有解決,就是屏蔽。所以告訴大家一個(gè)最完美window.open()不會(huì)
屏蔽的,道理很簡單,就是建一個(gè)form.然后提交form,因?yàn)閒orm可以在新窗口提高
給大家看看代碼吧。
在你的頁面里<form action=”" method=”get” target=”_blank” id=”tzForm” name=”tzForm”/>
<div id=”J_formStr”></div>
</form>
然后js
function openUrl(urlStr){
var pStr=”";
if(urlStr.indexOf(“?”)!= -1){
var str = urlStr.substr(urlStr.indexOf(“?”)+1,urlStr.length);
strs = str.split(“&”);
for(var i = 0; i < strs.length; i ++){
pStr=pStr+”<input type=’hidden’ name=’”+strs[i].split(“=”)[0]+”‘ value=’”+strs[i].split(“=”)[1]+”‘ />”;
}
}
document.getElementById(“J_formStr”).innerHTML=pStr;
document.tzForm.action=urlStr;
document.tzForm.submit();
}
大家可能會(huì)問,為什么還要這多代碼。不就是一個(gè)提交表單。給大家說說原因吧
(1) 為什么用get,而不用post,在新窗口頁面如果用post然后刷新。會(huì)有一個(gè)提交數(shù)據(jù)的對(duì)話框,所以才用get
(2)用get提交有個(gè)很關(guān)鍵的問題,如果你的url提交地址中有相對(duì)應(yīng)的參數(shù),打個(gè)比方,***.jsp?a=1&b=2在新窗口中
?a=1&b=2參數(shù)丟失掉。所以在上面有個(gè)pStr這個(gè)就是解析url中的參數(shù),然后動(dòng)態(tài)創(chuàng)建的表單元素,這樣參數(shù)就不會(huì)丟失。