Window 对象已在 $Interval 上清除

Window object cleared on $Interval

当我尝试在 $interval

中记录 AngularJS 中 $window.open() 定义的 window 对象时,我遇到了相当奇怪的行为
self = this
$scope.childWindow = $window.open(authService.buildAuthorizeUrl(), '_blank')
console.log $scope.childWindow
var1 = "I may not work"
self.var2 = 'I should work'
privateData.authInterval = $interval ->
  console.log $scope.childWindow
  console.log var1
  console.log self.var2
,
  1000

输出

Window {document: document, window: Window, frameElement: null, clientInformation: Navigator, onhashchange: null…}
Window {}
I may not work
I should work
Window {}
I may not work
I should work 

如您所见,第一个 console.log $scope.childWindow 正在输出一个完全定义的 window 对象。 $interval 内的所有其他人仅输出 {}。我试过不将 childWindow 附加到 $scope 对象,我试过将它附加到 self。我也尝试过遵循 this 示例并遇到相同的行为。任何人都知道为什么会这样?非常感谢。

JSFiddle 演示:http://jsfiddle.net/U3pVM/15124/

我在浏览器中尝试了您的代码,在 $interval 函数中设置调试点时,控制台中记录了一个空对象,但右侧的 watch 检查器显示 $scope.childWindow 不为空.所以你可能只能使用 $scope.childWindow.

我了解到,出于安全原因,这不应该在浏览器中工作,这可以解释为什么它会变得 "overwritten." 这个用例实际上是在 Blackberry10 Cordova 应用程序中。要解决此问题,您必须像这样在 config.xml 中禁用网络安全:

<access origin="*"/>
<preference name="websecurity" value="disable" />

当然 * 会将所有域列入白名单。要稍微加强安全性,请添加您要列入白名单的域。