1. 程式人生 > >通過$nextTick執行window.open談chrome的攔截機制

通過$nextTick執行window.open談chrome的攔截機制

今天在 $nextTick的回撥中,用了window.open,發現不能開啟新視窗了。搞了一上午才發現是被chrome攔截了(怪我眼拙沒看見…)。

後來搜了一下chrome的攔截機制,發現是因為chrome阻止了非使用者觸發的window.open。

先貼上程式碼:

<el-menu-item :index="item[1].src" :class="{openWindow: item[1].src === hasOpenWindow}" @click="open(item[1].src)" :data-open="item[1].openItem" >xxx</el-menu-item
>
open (url) {
	// 在更新完DOM後再執行
	this.$nextTick(() => {
		let openWindow = document.querySelector('.openWindow');
		// 如果data-open屬性是true則可以開啟新頁面,且不會重新整理iframe或開啟router-view
		if (openWindow.dataset.open) {	// 改為原生js獲取自定義屬性
			let width = 550;
			let height = 373;
			let top = (window.screen.availHeight -
height) / 2; let left = (window.screen.availWidth - width) / 2; window.open(url, 'newwindow', 'height=' + height + ',width = ' + width + ',top = ' + top + ',left = ' + left + 'toolbar = no,menubar=no,scrollbars=no,location=no,status=no'); } if (!openWindow.dataset.open) { // open === false 再顯示iframe
this.changeView(false); // 不顯示router-view // 子元件向父元件傳 this.$emit('getIframeSrc', url); } }); }

可以看到,因為window.open被寫在了$nextTick的回撥裡面,即使我們觸發了open事件,此時是在回撥的上下文中,並不在被點選的open事件裡面了,也就不算是使用者點選觸發的了。自然chrome就給遮蔽掉了。

相關推薦

通過$nextTick執行window.openchrome攔截機制

今天在 $nextTick的回撥中,用了window.open,發現不能開啟新視窗了。搞了一上午才發現是被chrome攔截了(怪我眼拙沒看見…)。 後來搜了一下chrome的攔截機制,發現是因為chrome阻止了非使用者觸發的window.open。 先貼上程式

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

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

window.open被瀏覽器攔截的解決方案

方案 attr fun click open target win element blog function newWin(url, id) { var a = document.createElement(‘a‘);

window.open()被瀏覽器攔截問題

一、原因 瀏覽器為了維護使用者安全和體驗,在JS中直接使用window.open(url,"_blank")來開啟新的連結是會被攔截的,(window.open(url,”_self”)改變當前的視窗是可以生效的),通常專案需要在ajax非同步請求完成後來開啟新連結,下面提供幾種解決方案 二

window.open()被瀏覽器攔截

近來在專案中,遇到這樣的操作:   在ajax請求的回撥函式中 需要使用window.open()開啟新頁面,但是等ajax請求成功之後,window.open()開啟新頁面總是被瀏覽器攔截,原因大概是,放在ajax回撥函式中的操作,被瀏覽器認為不是使用者主動觸發的事件,並

window.open()被攔截問題

沒有 win 標簽頁 詳情 頁面 主動 需求 同步 bsp 最近做項目的時候遇到一個需求,在商品詳情頁面中點擊購買按鈕,之後再新標簽頁中打開生成的訂單頁面,所以想用window.open()來實現。但是測試的時候發現打開的鏈接被瀏覽器攔截。 之後,開始在網上

關於window.open()被攔截

col span cat 現在 new www. pre ref 進行 原先window.open(‘www.baidu.com‘)是可以直接執行,不會被攔截 但現在改了代碼,有了判斷,windo.open被放入了ajax的回調中,此時,谷歌就會對彈出的頁面進行攔截了 經測

window.open攔截

攔截 strong 調用 簡單 res window func pre style 1)直接調用window.open 或 點擊的時候直接調用 window.open 是不會被攔截的 // 不會被攔截$(‘.btn-open‘).click(function(){

angularjs 中打開新的瀏覽器窗口(解決window.open(),瀏覽器攔截問題)

新窗口 ear ltr OS ati sco type ajax check 第一步:通過點擊事件,打開新窗口,並且傳遞參數 $scope.finalTrial = function(data){   var url = $state.href(‘content.check

window.open跳過瀏覽器攔截

pre cli clas ati open click var () url 轉自https://www.cnblogs.com/shizk/p/8458916.html $(‘#btn‘).click(function () { //打開一個不被攔截的新

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

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

ajax操作window.open()瀏覽器攔截解決

其實都算不上解決   因為其實太easy了    開始的時候看了網上的很多    意思都是說在ajax前先開啟一個視窗   然後再給它賦值其實根本原因就是因為在ajax中彈視窗 &nbs

window.open攔截的處理方法

文章來自:原始碼線上https://www.shengli.me/javascript/309.html   當我們在一個 ajax 回撥中執行 window.open 方法時,新頁面會被瀏覽器攔截。 因為在 Chrome 的安全機制裡,非使用者直接觸發的 window.ope

Axios請求 window.open攔截直接走 catch方法 處理(IOS系統處理)

按照慣例,我們得先找一下 有沒有已經解決的方法 然後 一頓搜尋,發現全都是 Ctrl + C,Ctrl + V的 部落格, 統統都是 如下方法: 連標點符號都沒變,嘿,mdzz //在axios傳送之前就開啟一個空白的新視窗 var newPage = window.open()

解決非同步載入window.open攔截

on: { click: () => { var newTab=window.open('about:blank'); thi

高版本chrome不再支援window.showmodaldialog 的臨時替換方案【用window.open

接管別人的專案,因開發時用了showmodaldialog 導致最近很多使用者chrome升級到最新之後 就無法彈窗了。原因是新版chrome[37+]不再支援showmodaldialog。 showmodaldialog 並不是W3C標準內的方法,起源於IE, 當是低版

window.open(url)開啟連結被瀏覽器攔截解決方案

瀏覽器為了維護使用者安全和體驗,禁止在JS中直接使用window.open(url)來開啟新的連結(window.open(url,”_self”)改變當前的視窗是可以生效的)。下面採用幾種變通方

window.open開啟新視窗被瀏覽器攔截的處理方法

window.open是javascript函式,該函式的作用是開啟一個新視窗或這改變原來的視窗,如果你直接在js中呼叫window.open()函式去開啟一個新視窗,瀏覽器會攔截你,那麼如何避免呢。 注意,只有直接使用js呼叫 window.open(url); 開啟新視窗時,才會被攔截,如果是改變原理額

非同步請求後根據結果window.open方式開啟新頁面,瀏覽器攔截彈窗問題

專案中出現一個問題,要求根據從後臺非同步請求後的結果開啟新的標籤頁,發現使用window.location.href=”地址”,該方法沒有問題,但是使用window.open開啟新頁面的時候會無效。

chrome window.open 無效

導致這個問題一般是ajax 回撥函式的時候用到window.open,直接使用window.open是沒問題的,網上各種說法解決發現都沒用 最後直接吧設定ajax async:false 然後吧window.open 的程式碼移到ajax 外面去問題解決了。 為什麼ajax