近在做項目的時候碰到了使用window.open被瀏覽器攔截的情況, 在本機實驗沒問題, 到了服務器就被攔截了, 火狐有攔截提示, 360瀏覽器攔截提示都沒有, 雖然在自己的環境可以對頁面進行放行,
另外, 可以發現, 當window.open為用戶觸發事件內部或者加載時, 不會被攔截, 一旦將彈出代碼移動到ajax或者一段異步代碼內部, 馬上就出現被攔截的情況了。
使用了一個可定制彈出窗口的外觀、尺寸大小、彈出位置以適應該頁面的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')
//寫成一行
-->
參數解釋:
window.open 彈出新窗口的命令;
page.html 彈出新窗口的文件名;
newwindow 彈出窗口的名字(不是文件名), 可用空''代替;
height=100 窗口高度;
top=0 窗口距離屏幕上方的像素值;
left=0 窗口距離屏幕左側的像素值;
toolbar=no 是否顯示工具欄,yes為顯示;
menubar,scrollbars 表示菜單欄和滾動欄;
resizable=no 是否允許改變窗口大小,yes為允許;
location=no 是否顯示地址欄,yes為允許;
status=no 是否顯示狀態欄內的信息(通常是文件已經打開),yes為允許;
原因分析
當瀏覽器檢測到非用戶操作產生的新彈出窗口, 則會對其進行阻止。因為瀏覽器認為這可能是一個廣告, 不是一個用戶希望看到的頁面。
解決方案:
1、使用a標簽替代
給出如下函數, 將此函數綁定到click的事件回調中, 就可以避免大部分瀏覽器對窗口彈出的攔截:
function newWin(url, id) {
var a = document.createElement('a');
a.setAttribute('href', url);
a.setAttribute('target', '_blank'); // 這里可以改為top, 防止彈出多個窗口
a.setAttribute('id', id);
// 防止反復添加
if(!document.getElementById(id)) {
document.body.appendChild(a);
}
a.click();
}
2、使用form的submit方法打開一個頁面
這種方法需要構造一個from, 然后由js代碼觸發form的submit, 將表單提交到一個新的頁面, 如:
$("#ID").attr('target', '_blank');
$("#ID").submit();
大家注意, 以上兩種方法不適合放在ajax的回調函數中, 如果放在回調函數中, 依然會被瀏覽器攔截。
3、終極解決方案–先彈出窗口, 然后重定向
第三種方案, 其實是一種變通方案, 核心思想是: 先通過用戶點擊打開頁面, 然后再對頁面進行重定向。示例代碼如下:
xx.addEventListener('click', function () {
// 打開頁面,此處最好使用提示頁面
var newTab=window.open('about:blank');
ajax().done(function() {
// 重定向到目標頁面
newWin.location.href = 'target url';
});
});
以上方法其實是打開了兩個地址, 所以建議大家打開第一個地址的時候給出一個類似'當前頁面正在加載中,請稍后。。'的簡單提示頁, 這樣可以避免打開兩次真正的目標頁面, 讓用戶察覺到頁面的重定向。
補充:
JS打開新窗口的2種方式
1.超鏈接
<ahref="http://www.xxxxxx.com" title="標題">Hello world</a>
等效于js代碼
window.location.href="http://www.xxxxxx.com"; //在同當前窗口中打開窗口
2.超鏈接
<a href="http://www.xxxxxx.com" title="標題" target="_blank">Hello world</a>
等效于js代碼
window.open("www.xxxxxx.com"); //在另外新建窗口中打開窗口
3、關閉新窗口:
HTML中無法完全防止用戶復制文本,因為HTML的主要目的是描述文檔的結構和內容,而不是控制用戶的行為。但是,你可以采取以下一些措施來降低用戶復制的可能性:
禁用文本選擇:
你可以使用CSS的user-select屬性禁止用戶選擇文本。例如,可以使用以下代碼來禁止選擇文本:
使用圖片或Flash替代文本:
可以使用圖片或Flash來替代文本,這樣用戶將不能復制文本。
使用JavaScript禁止復制:
你可以使用JavaScript來禁止用戶復制文本。例如,可以使用以下代碼:
使用JavaScript對復制行為進行攔截:
你可以使用JavaScript來攔截用戶的復制行為,然后取消該行為。例如,可以使用以下代碼:
這將在用戶嘗試復制文本時彈出警告框,并取消復制行為。
請注意,這些措施可以減少用戶復制文本的可能性,但是不保證完全防止用戶復制。用戶始終可以通過瀏覽器插件或其他技術繞過這些限制。
個游戲,彈出廣告
看個新聞,也彈廣告
聽首音樂,還是彈廣告
......
還能不能好好上網了
網
絡彈窗已基本涵蓋網站、瀏覽器、游戲、播放器等絕大部分互聯網產品。據不完全統計,常用軟件中有彈窗廣告行為的軟件達1221個,其中每天彈出廣告數量超過1000次的軟件近500個。與此同時,近年來針對惡意網絡彈窗的投訴也越來越多。有的惡意彈窗強制用戶頻繁點擊廣告、捆綁安裝不明軟件,有的惡意彈窗甚至傳播淫穢色情、虛假詐騙信息和木馬病毒,給大家造成很大的困擾。
網絡配圖
碰到這種情況怎么辦?
此前有關部門就已進行過多次專項治理,如發現惡意網絡彈窗,大家可以隨時向網絡內容主管部門舉報:
?1.中國互聯網違法和不良信息舉報中心的舉報電話是12377,舉報網址是www.12377.cn。
?2.也可以向網站所屬地區的網絡內容管理部門投訴。比如海南屬地網站上的惡意網絡彈窗廣告,就可以向海南網信辦舉報,舉報郵箱是wangxinhainan@qq.com。
除了舉報,還要做這些↓
此外,我們還要增強自我防護意識,特別是要提高利用技術手段防范惡意網絡彈窗的能力。瀏覽器,以及360安全衛士、騰訊手機管家等安全軟件都有過濾網頁和軟件彈窗廣告的功能。大家可以在網絡上搜索使用辦法或者在相關專業人士指導下使用。
以下是幾個供參考的辦法:
1.電腦彈窗廣告如何去除 360安全衛士輕松解決
http://bbs.360.cn/thread-14860499-1-1.html
2.Android版騰訊手機管家怎么設置廣告攔截?
http://kf.qq.com/faq/120322fu63YV130422b2IjyQ.html
3.iPhone版騰訊手機管家騷擾攔截功能介紹
http://kf.qq.com/faq/1205112qAreA160913f2qmye.html
4.如何屏蔽網頁彈出的廣告窗口
https://jingyan.baidu.com/article/3065b3b6e67dc8becff8a492.html
5.輕松屏蔽PC端和移動端上的廣告彈窗
http://blog.sina.com.cn/s/blog_140dc73050102wv8n.html
來源:網信海南
*請認真填寫需求信息,我們會在24小時內與您取得聯系。