2015-04-22 16 views
5

sto sperimentando comportamento piuttosto strano quando si cerca di accedere un oggetto finestra definito da $window.open() in AngularJS all'interno di un $interval

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 

uscita

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 

Come si può vedere , il primo console.log $scope.childWindow sta emettendo un oggetto finestra completamente definito. Tutti gli altri, all'interno di $interval, emettono solo {}. Ho provato a non allegare childWindow all'oggetto $scope e ho provato a collegarlo a self. Ho anche provato a seguire l'esempio this e ho riscontrato lo stesso comportamento. Qualcuno ha idea del perché questo sta accadendo? Grazie mille.

JSFiddle demo: http://jsfiddle.net/U3pVM/15124/

+0

Non sto ottenendo lo stesso risultato. Hai un esempio su jsfiddle/codepen/plnkr? – Trevor

+0

Ecco un jsfiddle che ho creato: http://jsfiddle.net/U3pVM/15124/ –

risposta

0

Ho imparato questo non dovrebbe funzionare nel browser per motivi di sicurezza, il che può spiegare il motivo per cui si sta facendo "sovrascritti". Il caso d'uso di questo era in realtà in un'applicazione Cordova Blackberry10. Per risolvere questo problema, è necessario disattivare la sicurezza web in config.xml in questo modo:

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

Naturalmente il * sarà whitelist tutti i domini. Per ridurre un po 'la sicurezza, aggiungi i domini che desideri autorizzare.

1

ho provato il codice in un browser e durante l'impostazione di un punto di debug all'interno della funzione $ intervallo di un oggetto vuoto è sempre collegato alla console, ma l'ispettore orologio a destra mostra che $ portata .childWindow non è vuoto. Quindi potresti essere in grado di usare $ scope.childWindow.

enter image description here

+0

Ho provato anche a controllarlo e ho trovato un risultato simile. Il mio obiettivo finale è quello di afferrare la posizione di 'childWindow' usando' $ scope.childWindow.window.location.href', ma non sembra che stia succedendo. La posizione è definita, ma non posso dire quali sono le sue proprietà. [Questi] (http://www.w3schools.com/jsref/obj_location.asp) sono apparentemente le proprietà, ma non sono nemmeno disponibili. Cose strane. –