window.open的替代方法

时间:2015-09-17 16:16:05

标签: javascript jquery html extjs extjs4

  • 我有一个js函数,当我将async作为false时,它会打开为新的 窗,
  • 但是当我按照弹出
  • 的方式显示async as true时
  • 我需要将代码设置为async as true,但它应该以新的方式打开 窗口不像弹出窗口
  • 你能告诉我如何制作异步请求吗? 新窗口不会作为弹出窗口加载。
  • 是否有window.open
  • 的替代方法
  • 提供我的代码

        //
        debugger;
        Ext.Ajax.request({
            async: false,
            url: sports.util.Utils.getContextPath() + '/tabClicks.do',
    

3 个答案:

答案 0 :(得分:1)

您的代码有点奇怪,因此很难正确调整,但这是它的要点:

showNewWindow: function(menu) {
    var me = this,
        newWindowId = sports.util.Utils.randomString(12);

    //
    // Make a synchronous request so that the new window will
    // not load as a popup.
    //
    debugger;
    var popup = sports.util.Utils.openNewWindow('', 'menu', {}, null, null, newWindowId);
    Ext.Ajax.request({
        async: false,
        url: sports.util.Utils.getContextPath() + '/tabClicks.do',
        params: {
            oldWindowId: sports.util.Utils.getWindowName(),
            newWindowId: newWindowId
        },
        success: function() {
            popup.location.href = "/desktop/main";
        },
        scope: me
    });
},

答案 1 :(得分:0)

弹出窗口阻止程序尝试通过直接响应用户操作或应用程序自发地判断何时打开窗口。他们可能这样做的方法是检查调用window.open()的函数是否运行以响应用户触发的事件,如鼠标点击。

执行同步AJAX请求时,当响应到达且成功函数调用window.open时,鼠标单击触发的函数仍在运行。所以它被认为是用户请求的窗口,而不是弹出窗口。

使用异步AJAX时,成功函数运行时,单击处理程序不再运行。浏览器认为对window.open的异步调用是自发的,因此它会阻止它。

我认为没有办法解决这个问题,因为你能做的任何事情都可以被其他人用来绕过弹出窗口拦截器,而且它们也没用。

答案 2 :(得分:0)

function openNewWin(name) {
      $.ajax({
          async: false,
          type: 'POST',
          url: 'your url',
          success: function () {
               window.open(name);
          },
          async: false
      });
  }