8

Chrome 打包应用程序具有相当严格的内容安全政策。这样做的一个结果是操纵位置(如单击链接)会导致:

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

Target _blank 将在 chrome 中打开链接,这不是我想要的。AngularJS 的路由能在这样一个封闭的环境中工作吗?

他们的文档给出了一个 Angular 应用程序的示例,但明显不使用路由。

更新

这是链接,单击时会出现错误:<a class='walrus-link' ng-href='paystubs/{{walrus.id}}'>Walrus {{id}}!</a>

4

2 回答 2

8

不要使用 href,而是尝试使用 ng-click 并调用控制器的方法,然后使用 $location 重新定位到适当的页面。请参阅AngularJS 站点上的文档。文档中的以下引用表明 $location 服务可能适合您:

我什么时候应该使用 $location?任何时候您的应用程序需要对当前 URL 的更改做出反应,或者如果您想更改浏览器中的当前 URL。

您的代码可能如下所示:

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

在您的父控制器中,您需要一个名为“getPaystub”的范围方法,其行类似于:

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

这种方式角度保持控制,不会导致页面刷新。这有望使您保持在 CSP 的范围内。不幸的是,我无法在打包的应用程序中对此进行测试,但我在 Web 应用程序中使用了完全相同的约定,而且效果很好。

于 2013-03-14T02:28:27.733 回答
0

当不使用 $routeProvider 的 html5 模式(默认禁用)时,路由在我的 chrome 应用程序中对我有用,您只需在 url 中使用哈希。

所以我的链接看起来像这样:

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

$routeProvider 配置如下:

$routeProvider.when('/about', {templateUrl:'about.html'})
于 2015-05-28T19:14:08.553 回答