1. 程式人生 > >解決彈出的視窗window.open會被瀏覽器阻止的問題

解決彈出的視窗window.open會被瀏覽器阻止的問題

問題現象

最近在做專案的時候碰到了使用window.open被瀏覽器攔截的情況,有時候會一直連線,有時候會偶爾攔截,

嘗試了很多方法,走了很多彎路,總結一下結果分享大家

原因分析&深入研究

1 當瀏覽器檢測到非使用者操作產生的新彈出視窗,則會對其進行阻止。因為瀏覽器認為這不是使用者希望看到的頁面

2 在chrome的安全機制裡面,非使用者觸發的window.open方法,是會被攔截的。

複製程式碼
var btn = $('#btn');
btn.click(function () {
    //不會被攔截
    window.open('http://cssha.com')
});
複製程式碼

如上  window.open是使用者觸發的時候,是不會被攔截的,可以正常開啟新視窗

複製程式碼
var btn = $('#btn');
btn.click(function () {
    $.ajax({
        url: 'ooxx',
        success: function (url) {
            //會被攔截
            window.open(url);
        }
    })
});
複製程式碼

如上 使用者沒有直接出發window.open,而是發出一個ajax請求,window.open方法被放在了ajax的回撥函式裡,這樣的情況是會被攔截的

解決方案

先彈出一個頁面,再進行ajax請求,這樣就不會被攔截, 例項程式碼如下

複製程式碼
var btn = $('#btn');
btn.click(
function () { //開啟一個不被攔截的新視窗 var newWindow = window.open(); $.ajax({ url: 'ooxx', success: function (url) { //修改新視窗的url newWindow.location.href = url; } }) });
複製程式碼

繼續進行優化

複製程式碼
var btn = $('#btn');
btn.click(function () {

    //開啟一個不被攔截的新視窗
  var adPopup = window.open('about:blank', '_blank','width='+window.screen.width+',height='+window.screen.height+', ...');
    $.ajax({
        url: 
'ooxx',      type:'post',      dataType:'json', success: function (url) { //修改新視窗的url        adPopup.blur();        adPopup.opener.focus();        adPopup.location = url;         }
    })
});
複製程式碼

附帶其他彈框方式

複製程式碼
//a標籤動態click
function newWin(url, id) {
              var a = document.createElement('a');
              a.setAttribute('href', url);
              a.setAttribute('target', '_blank');
              a.setAttribute('id', id);
              // 防止反覆新增
              if(!document.getElementById(id)) document.body.appendChild(a);
              a.click();
  }
 //定時彈框 setTimeout('window.open(url);', 1);

//I LIKE THIS
function openwin(url) {
    var a = document.createElement("a");
    a.setAttribute("href", url);
    a.setAttribute("target", "_blank");
    a.setAttribute("id", "openwin");
    document.body.appendChild(a);
    a.click();
} 

相關推薦

解決視窗window.open瀏覽器阻止的問題

問題現象最近在做專案的時候碰到了使用window.open被瀏覽器攔截的情況,有時候會一直連線,有時候會偶爾攔截,嘗試了很多方法,走了很多彎路,總結一下結果分享大家原因分析&深入研究1 當瀏覽器檢測到非使用者操作產生的新彈出視窗,則會對其進行阻止。因為瀏覽器認為這不是

解決視窗window.open瀏覽器阻止的問題(自定義open方法)

function openwin(url) {     var a = document.createElement("a");     a.setAttribute("href", url);     a.setAttribute("target", "_blank");

解決的窗口瀏覽器阻止的問題

syn eww 如果 bsp als 返回結果 color new com 常用的打開新窗口的方式 1、window.open() 2、用a標簽的target="_blank"   在模板中插入一個a標簽,然後javascript去觸發a鏈接的click,實現跳轉。(

ajax非同步請求中使用window.open瀏覽器攔截解決方案

問題剖析:function click_fun(){ window.open("www.baidu.com");//能開啟 $.ajax({ 'url': '${pageContext.request.contextPath}/activity/sav

ajax請求裡面呼叫window.open瀏覽器攔截(優化版)

眾所周知,ajax請求裡面呼叫window.open會被瀏覽器攔截方法有兩種解決辦法,但是經測驗例如ajax改為async:false同步請求還會出現一些問題(比如站點外網址被攔截);第一種解決辦法優化:該方法優點描述:比如ajax回撥函式失敗,瀏覽器預設開啟的空連結會自動關

window.open() 某些情況瀏覽器阻止窗口及解決辦法

默認 多次 location body 使用 www 介紹 fin 代碼   window.open() 的作用是創建一個新的瀏覽器窗口用來打開相關的資源,這是一個原生的 Javascript API 接口。   有關 window.open() 的基本使用可以參考 moz

window.open() 某些情況瀏覽器阻止視窗

window.open() 的作用是建立一個新的瀏覽器視窗用來開啟相關的資源,這是一個原生的 Javascript API 介面。有關 window.open() 的基本使用可以參考 mozilla 提供的  API 文件:window.open 。大部分現代的瀏覽器(泛指

視窗window.showModelessDialog引數介紹

讓彈出視窗不被Googlebar、Alexabar、3721等視窗攔截工具攔截掉window.showModelessDialog()方法window.showModalDialog(sURL [, vArguments] [, sFeatures])vReturnValue = window.showMod

視窗window.onload失效

今天發現window.onload事件在IE6下彈出視窗失效,在連結開啟的頁面就好好的,在彈出視窗死活不起作用,試了半天找到解決辦法。 原來寫法:window.onload = bindHandler; 解決辦法:window.attachEvent("onload",

window.open方法瀏覽器攔截的處理方式

問題現象 當我們在一個 ajax 回撥中執行 window.open 方法時,新頁面會被瀏覽器攔截。 原因 在 Chrome 的安全機制裡,非使用者直接觸發的 window.open 方法,是會被攔截的。 處理 $('#jump-btn').on('click', funct

JS中window.open視窗居中

利用下面這個js函式可以使window.open彈出的視窗居中function openwindow(url,name,iWidth,iHeight){var url; //轉向網頁的地址;var name; //網頁名稱,可為空;var iWidth; //彈出視窗的寬度;var iHeight; //彈出

js實現window.open攔截的解決方法匯總

line bsp pan 測試 ava cli class 頁面 點擊 一、問題: 今天在處理頁面ajax請求過程中,想實現請求後打開新頁面,就想到通過 js window.open 來實現,但是最終都被瀏覽器攔截了。 二、分析: 在谷歌搜索有沒有解決方法,有些說可以通過新

layui層layer過大遮擋解決辦法-resize事件自動調整

思路 pla title 位置 相關 無法 dex 前端 情況 遇到的問題 ??最近在使用layui做一個管理系統,由於前端技術有限,在開發過程中也遇到這樣那樣的問題,即比較簡單的問題有時也要搞半天。。??layer彈出窗口在彈出時指定了area,彈出後,如果當前頁面(if

解決Flash擋住的問題

function DivOver(objID){var obj = document.all[objID];// 只有IE5.5以上Iframe的z-index才有效if (ie55up){if (overIframe == null){   overIframe = document.createEleme

div視窗在frameset外層解決方案

首頁通過framset經行網頁佈局,現在有個臨時的訊息視窗,ajax返回會彈出來。但是這個就有問題了。div作為網頁元素,是依賴與frame的。怎麼讓其在整個檢視視窗的最上層呢? frmae 連線網頁,會對超過的部分進行遮擋。這裡提供了一種解決方案.先記錄下來。 <

解決jqueryeasyUI dialog 視窗超出瀏覽器,導致不能關閉的bug

使用panel的onMove事件解決了panel,dialog以及window元件在被拖動時,會超出瀏覽器邊界而無法拖回的情況。 當視窗被拖出瀏覽器有邊界時,$(document).width();會增大,增大的部分就是視窗超過瀏覽器視窗的部分,所以right >

windows.open()引數列表(視窗

前言:經常上網的朋友可能會到過這樣一些網站,一進入首頁立刻會彈出一個視窗,或者按一個連線或按鈕彈出,通常在這個窗口裡會顯示一些注意事項、版權資訊 、警告、歡迎光顧之類的話或者作者想要特別提示的資訊。其實製作這樣的頁面效果非常的容易,只要往該頁面的HTML里加入幾段java

easyui dialog 子視窗jsp(視窗)呼叫父jsp頁面方法操作父jsp

父jsp(monthDuty.jsp'): <script src="<%=contextPath%>/js/sunnyjs/monthDutyJs.js" type="text/ja

解決input獲取焦點,輸入法之後,input遮擋的問題

關於input輸入框fixed在視窗底部的時候,input獲取焦點,彈出輸入法,input會被輸入法遮擋,導致輸入內容不方便。 我們可以用scrollIntoView 與 scrollIntoView

一個可以不廣告攔截器攔截的視窗

/*** 定義ForceWindow類建構函式* 無引數* 無返回值*/function ForceWindow (){  this.r = document.documentElement;  this.f = document.createElement("FORM");