2013-03-13 80 views
8

Chrome Packaged Apps有一個相當嚴格的內容安全策略。這樣做的一個結果是,操縱位置(如點擊鏈接)的結果:不改變位置的角度路由

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

目標_blank將在Chrome中打開的鏈接是不是我想要的。 AngularJS的路由可以在這種鎖定的環境中工作嗎?

他們的文檔給出了一個Angular應用程序的an example,但顯然不使用路由。

更新

這裏是鏈接,點擊後,給出了錯誤:<a class='walrus-link' ng-href='paystubs/{{walrus.id}}'>Walrus {{id}}!</a>

+0

進行仔細的檢查:你採用了棱角分明1.1.0+,而不是1.0.x的?你可以發佈你的$ routeProvider的代碼給你帶來麻煩嗎? – eterps 2013-03-13 22:42:23

+0

是的我是最新的(1.1.3) – Chris 2013-03-14 01:41:56

+0

@eterps更新! – Chris 2013-03-14 01:43:46

回答

8

而不是使用一個href,請嘗試使用NG單擊並調用一個方法來你的控制器搬遷到使用$ location的適當頁面。請參閱AngularJS site上的文檔。從文檔下面的報價給出的指示$位置服務或許對你來說合適:

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.

您的代碼可能是這個樣子:

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

,並在您的父母控制器,你」會需要所謂的「getPaystub」一個範圍的方法有相似的一行:

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

這樣的角度保持控制並不會導致頁面刷新。這有希望讓你保持在CSP的範圍之內。不幸的是,我無法在打包的應用程序中測試此功能,但我在網絡應用程序中使用了完全相同的約定,並且它的工作原理非常漂亮。

0

在我的chrome應用程序中,當不使用$ routeProvider的html5模式(默認情況下禁用)時,我的路由適用於我,您只需在url中使用散列。

所以我的鏈接看起來是這樣的:

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

$ routeProvider配置如下:

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