2013-03-13 82 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'})