js操作新开页面会被拦截,如何解决?

页面上一个按钮,有个onclick事件,点击触发js,发送ajax请求到后台,后台经过一系列判断,返回url到js

<a class="a" id="k_id" href="javascript:void(0);" onclick="test($(this),id1,id2);"></a>
function test(oElement,id1,id2) {
    //发送ajax请求...返回一个url
    var url = "ajax请求返回的url";
    
    //js操作将返回的url赋值到页面上的a标签,然后js模拟a标签点击事件
    $(oElement).attr("href",url);
    $(oElement).removeAttr("onclick");
    var id = $(oElement).attr("id");
    document.getElementById(id).click();//这里点击a标签
    
    //这样的操作会被浏览器拦截,
}

求解

$(oElement).attr("href",url);
$(oElement).removeAttr("onclick");

经测试,假如js操作新开页面的动作没有放在ajax的回调中的话
这样就不需要js去模拟点击,jquery操作修改了href属性后直接就能够跳转

浏览器会判断新开标签是否是用户自身行为(特别是safari) 你的url如果是后台返回 瞬间返回是可以打开的 如果延迟个几百毫秒就会被拦截,以下是我自己的解决办法:

winRef = window.open("", "_blank");

winRef.location = response.url;

点击函数后立即打开新标签,然后再发送请求,后台发挥的url地址赋值给你新开标签的对象的location 就可以了
新开标签的兼容基本就是这个思路

你可以直接跳转到该url吧,为啥要模拟点击, 直接 window.location.href = url

onclick监听了click事件,这样就先触发调用test方法,一直重复调用了,一直触发不了herf跳转

发送ajax之后,不用模拟a标签点击事件,直接location.href = 需要跳转的url 就可以了

跳转页面时,没有必要去除 aonclick 事件;
需要去除的话当前方式直接 t.onclick = null; 即可

<a class="a" id="k_id" href="javascript:void(0);" onclick="test(this)">123123</a>
function test(t) {
    var url = "http://www.baidu.com";
    t.setAttribute("href", url);
    t.onclick = null;
    t.click();
}

可以试试
新开页面:window.location.href = url;
新开窗口:window.open(url);

直接用window.location.href不是更好吗?

a标签有默认的click事件,估计onClick与默认事件冲突了。

是因为有异步操作,浏览器会拦截 window.open()

可以把 ajax 改成同步,或是想办法前端计算 url。

发现和今天的问题差不多 如何修改浏览器的a标签属性的默认触发机制?

  • 这种css3实现的鼠标滑过的动态效果怎么写?
  • 如何在服务端利用user-agent精准判断浏览器类型?
  • 在使用Ajax加载外部文件,为什么在提示之后才加载完成?
  • jquery中formdate一直获取不到对象中的[0]的值 包括本身也是一个空的数据怎么办?
  • js里foo()和new foo()都可以执行对应的方法,那区别在哪呢?
  • 最近在学习css,有个疑问,用relative+top与用float+margin-top有什么区别,感觉都能有同样效果
  • HTML事件触发如何获取触发源?
  • 如何解决FormData.delete()在safari不能用的问题
  • 大学狗自学PHP,请教一下,PHP学到什么程度好找工作。
  • 为什么这段代码输出结果是十个10呢?
  • Mui这个框架直接去写wap站点可以不?