8

Chromeパッケージアプリには、かなり厳格なコンテンツセキュリティポリシーがあります。この結果の1つは、場所を操作すると(リンクをクリックするなど)、次のようになります。

'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);
}

このように、Angularは制御を維持し、ページの更新を引き起こしません。これにより、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 に答える