2013-03-13 8 views
8

Chrome Packaged Apps haben eine ziemlich strenge Inhaltssicherheitsrichtlinie. Ein Ergebnis davon ist, dass sich die Position Manipulation (wie auf einen Link zu klicken) ergibt sich:Winkelführung ohne Standortwechsel

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

Ziel _blank den Link in Chrom öffnen, die nicht das, was ich will. Kann das AngularJS-Routing in einer solchen gesperrten Umgebung funktionieren?

Sie geben an example einer Angular App, aber auffällig verwendet Routing nicht.

aktualisieren

Hier ist der Link, dass, wenn sie angeklickt, erscheint die Fehlermeldung: <a class='walrus-link' ng-href='paystubs/{{walrus.id}}'>Walrus {{id}}!</a>

+0

Nur eine Plausibilitätsprüfung:

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

$ routeProvider Konfiguration ist wie folgt sind Sie Angular 1.1.0+ anstelle von 1.0.x? Und können Sie den Code für Ihren $ routeProvider veröffentlichen, der Ihnen Probleme bereitet? – eterps

+0

yep ich bin auf dem neuesten Stand (1.1.3) – Chris

+0

@eterps Aktualisiert! – Chris

Antwort

8

Anstatt ein href zu verwenden, versuchen, eine Methode zu Ihrem Controller ng klicken, und rufen Sie die Verschiebt zu die entsprechende Seite mit $ location. Siehe die Dokumentation zum AngularJS site. Das folgende Zitat aus dem Dokument gibt einen Hinweis darauf, dass der $ location Service könnte für Sie geeignet sein:

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.

Ihren Code wie folgt aussehen könnte:

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

und in Ihrer Mutter Controller, Sie‘ ll einen Bereich Methode müssen mit einer Linie namens ‚getPaystub‘ ähnlich wie:

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

auf diese Weise Steuerwinkel hält und nicht eine Aktualisierung der Seite führen. Dies hält Sie hoffentlich innerhalb der Grenzen des CSP. Leider kann ich das nicht in einer gepackten App testen, aber ich habe genau die gleiche Konvention in einer Web-App verwendet und es funktioniert einfach nur gut.

0

Routing funktioniert für mich in meiner Chrome-App, wenn nicht $ RouteProviders HTML5-Modus verwendet (die standardmäßig deaktiviert ist), müssen Sie nur einen Hash in der URL verwenden.

so aussehen meine Links wie folgt aus:

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