2013-03-13 17 views
8

Chrome Packaged Apps avere una politica di sicurezza dei contenuti piuttosto severa. Un risultato di questo è che manipolando la posizione (come cliccare su un link) si traduce in:Instradamento angolare senza modifica della posizione

'Can't open same-window link to "chrome-extension://lkjasdfjklbdskjasdfjkhfdshjksad/derp.html"; try target="_blank". ' 

_blank destinazione verrà aperto il collegamento in cromo, che non è quello che voglio. Il routing di AngularJS può funzionare in un ambiente così bloccato?

Questi documenti forniscono an example di un'app Angolare, ma evidentemente non utilizzano il routing.

Aggiornamento

Ecco il link che, se cliccato, dà l'errore: <a class='walrus-link' ng-href='paystubs/{{walrus.id}}'>Walrus {{id}}!</a>

+0

Basta un controllo di integrità: stai usando 1.1.0+ angolare invece di 1.0.x? E puoi pubblicare il codice per $ routeProvider che ti dà problemi? – eterps

+0

sì, sono l'ultimo (1.1.3) – Chris

+0

@eterps aggiornato! – Chris

risposta

8

Invece di usare un href, provare a utilizzare ng clic e chiamare un metodo per il controller le trasferisce a la pagina appropriata usando $ posizione. Vedere la documentazione su AngularJS site. La seguente citazione dal documento fornisce un'indicazione che il servizio di localizzazione $ potrebbe essere opportuno per voi:

When should I use $location? Any time your application needs to react to a change in the current URL or if you want to change the current URL in the browser.

Il codice potrebbe essere simile a questa:

<a class='walrus-link' ng-click='getPaystub(walrus.id)'>Walrus {{id}}!</a> 

e nel controllore genitore, si' ll bisogno di un metodo di portata chiamato 'getPaystub' con una linea simile a:

$scope.getPaystub = function(selectedWalrusId) { 
    $location.path('paystubs/'+$scope.walrus.id); 
} 

In questo modo angolare mantiene il controllo e non causerà un aggiornamento della pagina. Questo si spera che ti mantenga entro i limiti del CSP. Sfortunatamente non riesco a testarlo in un'app confezionata, ma ho usato la stessa identica convenzione in un'app Web e funziona semplicemente dandy.

0

l'instradamento funziona per me nella mia app di Chrome quando non si utilizza la modalità html5 di $ routeProvider (che è disabilitata per impostazione predefinita), è sufficiente utilizzare un hash nell'URL.

così i miei link simile a questa:

<a href="#about">About</a> 

configurazione $ routeProvider è la seguente:

$routeProvider.when('/about', {templateUrl:'about.html'}) 
Problemi correlati