阅读 232

chrome 窗口拦截问题

产品提了一个简单的需求,就是想要重新打开一个界面。因为这里没有回退动作。

window.location.href :在当前界面渲染新界面。

window.open:新建一个界面并渲染新界面。

很明显,我用了window.open,然而

我这是在ajax回调函数里的,直接被拦截。



然后我就想到了用a标签啊,让浏览器觉得是用户自己创建的,跳过安全问题。

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(); 
} 复制代码


这是百度来的,然而并不行,因为是ajax回调啊。有人跟我说写在回调外面呗,我呵呵!

然后,在跳转button那个函数里面一开始写:

var newWin = window.open(‘你的要跳转的界面’)复制代码

然后在回调成功函数success:函数里面写,

newWin.location.href = '你的要跳转的界面';复制代码

感觉就是跳过回调,一开始就打开了这个界面,然后只是再跳过去。有人会觉得这个会不会体验不好,你可以在window.open时打开链接时那个url,给个默认界面。不过,不用担心,这基本是无缝切换的,没有默认界面,用户也感觉不到。

如果后台能重定向就更好了,没前端啥事。


(但是我这里是websocket,这样做有点bug 会有undefined,因为数据还没拿到,但修复了。其他情况应该也没问题。)