2013-03-26 13 views
21

AngularJSでは、次のような状況で、Firefoxは次のように生成されるURLの前にunsafe:を置きます。その後、「アドレスは理解できませんでした」というエラーページが表示されます。これはローカルPCのファイル要求です。角度の安全でないリンク

リンク:

<li ng-repeat="fruit in fruits"> 
    <a href="{{ fruit.link }}">{{ fruit.title }}</a> 
</li> 

アレイ:

$scope.fruits = [ 
    { "title"  : "Orange", 
     "link"  : "fruits_orange.html" } 
]; 
+0

は – charlietfl

答えて

45

あなたはこのコミットの副作用を見ている: https://github.com/angular/angular.js/commit/9532234bf1c408af9a6fd2c4743fdb585b920531いくつかのセキュリティ上の危険に対処することを目指しています。

これは(それは私はあなたが1.0.5の1つのまたは1.1.3 AngularJSのバージョンを使用していることを前提としていhttps://github.com/angular/angular.js/commit/7b236b29aa3a6f6dfe722815e0a2667d9b7f0899

で、その後リラックスしました。あなたがもしそうならfile://で始まるURLに非後方互換の変更を導入しましたコミットそのよう$compileProviderを設定することにより、file:// URLのサポートを再度有効にすることができます

angular.module('myModule', [], function ($compileProvider) { 

    $compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file):/); 

}); 

または上記角度1.2.8とで:

angular.module('myModule', [], function ($compileProvider) { 

    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file):/); 

}); 
+1

おかげで 'NG-href'..seeドキュメントを使用してみてください、私はこのコードを配置する必要がありますどこ?私がコントローラに入れただけで(引数リストに$ compileProviderを追加すると)、それは 'Error:Unknown provider:$ compileProviderProvider'と表示されます。 私は1.0.5(最新のGoogle開発者から)を使用しています。 – Ben

+0

Btw、クイックフィックスは1.0.4を使用しています。 – Ben

+1

@Benこのコードを自分のモジュールの設定ブロックに置く必要があります(私のレスポンスとそれに付随するソースコード)。モジュールについてはhttp://docs.angularjsで読むことができます。org/guide/moduleもちろん、1.0.4に戻すと、1.0.5と1.1.3だけが影響を受けるため、問題はなくなります。 –

3
angular.module('somemodule').config(['$compileProvider' , function ($compileProvider) 
    { 
      $compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto):/); 
    }]); 
+0

Angular 1.2+では、このスレッドの類似ソリューション:http://stackoverflow.com/questions/15606751/angular-changes-urls-to-unsafe-in-extension-page –

4

コントローラにホワイトリストを追加します。 Angular.js 1.2の場合

:角度1.1.xおよび1.0.xのために

app.config(['$compileProvider', function($compileProvider) { 
    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|tel):/); 
}]); 

urlSanitizationWhitelistを使用しています。 referenceを参照してください。

1

私はangular 1.4.0を使用していますし、次の形式で働いていた:あなたがしている場合は

ng-href="http://{{baseURLHref}}{{baseURLPort}}/routingPathName" 

ng-Sanitize

  • が付加unsafeを取り払うことで助けたng-hrefの初めにhttp://を追加しますhttpsの場合、すべてをハードコードするのは問題ではありません。
  • しかし、あなたは両方の環境で動作するようにされているシステムをしている場合は、私が(彼らはプロキシサーバの問題を助ける$rootScopeで変数を設定していlocation.protocol

からプロトコル検出を使用する場合がありますそれは)自分のサイトからCSSを消費

angular.module('myApp').run(function ($route, $rootScope, $location) { 
    $rootScope.baseURLHref = ''; 
    $rootScope.baseURLPort = ''; 
    if($location.host() != 'localhost'){ 
     $rootScope.baseURLHref = $location.host(); 
     $rootScope.baseURLPort = ':' + $location.port(); 
    } 
    ... 
関連する問題