$ window.open在Firefox

时间:2015-10-05 10:17:01

标签: angularjs firefox window.open

我有一个基本上由

组成的功能
var onclick = function() {
   $window.open(url, "_blank", 'location=yes');
}

在Firefox上,当我点击时,我得到:

Error: [$rootScope:inprog] $apply already in progress

这是一个非常常见的问题,通常通过将整个事件放在$timeout()块中来解决。

除了从超时调用$window.open()激活弹出窗口阻止程序!我需要一些方法来完成同样的事情,而不退出线程。

2 个答案:

答案 0 :(得分:0)

尝试:

var onclick = function() {
  if($scope.$root.$$phase) {
    $timeout(function() {
      $window.open(url, "_blank", 'location=yes');
    },0,false);
  } else {
    $window.open(url, "_blank", 'location=yes');
  }
}

但是,你有$ window.open args的双重性。您可以更好地完成代码:

var onclick = function() {
  var windowArgs = [url, "_blank", 'location=yes'];

  if($scope.$root.$$phase) {
    $timeout(function() {
      $window.open.apply($window,windowArgs);
    },0,false);
  } else {
    $window.open.apply($window,windowArgs);
  }
}

答案 1 :(得分:-1)

使用

window.open()

删除$ window

使用类似:

window.open(url,target,"status=no,height="100px",width="100px",resizable=yes,toolbar=yes,menubar=no,scrollbars=no);

Javascript窗口