Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
是否有看到有的網(wǎng)站進(jìn)入網(wǎng)站就會(huì)彈出網(wǎng)站公告提示框,今天飛飛和你們分享打開網(wǎng)站就彈出網(wǎng)站公告提示框的JS彈窗代碼,希望可以幫到你~
<script language="javascript">alert('我是飛飛,可以通過(guò)【服務(wù)器大本營(yíng)】相識(shí)是一種緣分,希望通過(guò)我的分享可以讓你更多的了解服務(wù)器,當(dāng)然有服務(wù)器需求的朋友可以加微信:137 5120 9102~域名速記:【服務(wù)器大本營(yíng)】首拼.com')</script>
直接復(fù)制JS代碼,粘貼到首頁(yè)文件,或者需要彈出的頁(yè)面即可
近在做項(xiàng)目的時(shí)候碰到了使用window.open被瀏覽器攔截的情況, 在本機(jī)實(shí)驗(yàn)沒(méi)問(wèn)題, 到了服務(wù)器就被攔截了, 火狐有攔截提示, 360瀏覽器攔截提示都沒(méi)有, 雖然在自己的環(huán)境可以對(duì)頁(yè)面進(jìn)行放行,
另外, 可以發(fā)現(xiàn), 當(dāng)window.open為用戶觸發(fā)事件內(nèi)部或者加載時(shí), 不會(huì)被攔截, 一旦將彈出代碼移動(dòng)到ajax或者一段異步代碼內(nèi)部, 馬上就出現(xiàn)被攔截的情況了。
使用了一個(gè)可定制彈出窗口的外觀、尺寸大小、彈出位置以適應(yīng)該頁(yè)面的window.open()方法, 代碼如下:
<!--
window.open ('page.html','newwindow','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no')
//寫成一行
-->
參數(shù)解釋:
window.open 彈出新窗口的命令;
page.html 彈出新窗口的文件名;
newwindow 彈出窗口的名字(不是文件名), 可用空''代替;
height=100 窗口高度;
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為允許;
原因分析
當(dāng)瀏覽器檢測(cè)到非用戶操作產(chǎn)生的新彈出窗口, 則會(huì)對(duì)其進(jìn)行阻止。因?yàn)闉g覽器認(rèn)為這可能是一個(gè)廣告, 不是一個(gè)用戶希望看到的頁(yè)面。
解決方案:
1、使用a標(biāo)簽替代
給出如下函數(shù), 將此函數(shù)綁定到click的事件回調(diào)中, 就可以避免大部分瀏覽器對(duì)窗口彈出的攔截:
function newWin(url, id) {
var a = document.createElement('a');
a.setAttribute('href', url);
a.setAttribute('target', '_blank'); // 這里可以改為top, 防止彈出多個(gè)窗口
a.setAttribute('id', id);
// 防止反復(fù)添加
if(!document.getElementById(id)) {
document.body.appendChild(a);
}
a.click();
}
2、使用form的submit方法打開一個(gè)頁(yè)面
這種方法需要構(gòu)造一個(gè)from, 然后由js代碼觸發(fā)form的submit, 將表單提交到一個(gè)新的頁(yè)面, 如:
$("#ID").attr('target', '_blank');
$("#ID").submit();
大家注意, 以上兩種方法不適合放在ajax的回調(diào)函數(shù)中, 如果放在回調(diào)函數(shù)中, 依然會(huì)被瀏覽器攔截。
3、終極解決方案–先彈出窗口, 然后重定向
第三種方案, 其實(shí)是一種變通方案, 核心思想是: 先通過(guò)用戶點(diǎn)擊打開頁(yè)面, 然后再對(duì)頁(yè)面進(jìn)行重定向。示例代碼如下:
xx.addEventListener('click', function () {
// 打開頁(yè)面,此處最好使用提示頁(yè)面
var newTab=window.open('about:blank');
ajax().done(function() {
// 重定向到目標(biāo)頁(yè)面
newWin.location.href = 'target url';
});
});
以上方法其實(shí)是打開了兩個(gè)地址, 所以建議大家打開第一個(gè)地址的時(shí)候給出一個(gè)類似'當(dāng)前頁(yè)面正在加載中,請(qǐng)稍后。。'的簡(jiǎn)單提示頁(yè), 這樣可以避免打開兩次真正的目標(biāo)頁(yè)面, 讓用戶察覺(jué)到頁(yè)面的重定向。
補(bǔ)充:
JS打開新窗口的2種方式
1.超鏈接
<ahref="http://www.xxxxxx.com" title="標(biāo)題">Hello world</a>
等效于js代碼
window.location.href="http://www.xxxxxx.com"; //在同當(dāng)前窗口中打開窗口
2.超鏈接
<a href="http://www.xxxxxx.com" title="標(biāo)題" target="_blank">Hello world</a>
等效于js代碼
window.open("www.xxxxxx.com"); //在另外新建窗口中打開窗口
3、關(guān)閉新窗口:
段JavaScript腳本程序, 負(fù)責(zé)關(guān)閉窗口, 如果網(wǎng)頁(yè)不是通過(guò)腳本程序打開的(window.open()), 調(diào)用window.close()腳本關(guān)閉窗口前, 必須先將window.opener對(duì)象置為null,
否則瀏覽器(IE7、IE8)會(huì)彈出一個(gè)確定關(guān)閉的對(duì)話框。
解決方案有以下幾種方法:
1.指向自己關(guān)閉法
<script language="javaScript">
function closeWindow()
{
window.opener = null;
window.open(' ', '_self', ' ');
window.close();
}
</script>
<input type='button' value='關(guān)閉窗口' onClick="closeWindow()">
2.框架top關(guān)閉法
<script language="javaScript">
function closeWindow()
{
window.opener = null;
window.open('', '_top', '');
window.parent.close();
}
</script>
<input type='button' value='關(guān)閉窗口' onClick="closeWindow()">
3.另外還有一種網(wǎng)上常用的方法, 不過(guò)似乎對(duì)IE8不起作用但在IE6上是中簡(jiǎn)單的直接關(guān)閉的方法
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。