5

jQueryでfirefox OSのwebAppを作っています。

アプリケーション タイプは、systemXHR を使用する権限を持っています。

したがって、マニフェスト ファイルでアクセス許可を定義します。アプリはシミュレーターでうまく機能しています。

しかし、アプリをデバイスにプッシュして任意のボタンをクリックすると、CSP エラーが検出されました。

エラー: エラー: CSP によってブロックされた eval() の呼び出し
ソース ファイル: app://0cd689b3-a514-4a1c-b1c4-efe372189761/js/jquery-1.9.1.js 行: 603

デバイス情報

  • OS バージョン : 1.1.0.0.-プレリリース
  • プラットフォームのバージョン: 18.0
  • Git コミット情報: 2013-05-01 19:48:40

サンプルコードは

<div data-role="page" id="signinPageId">
  <script src="js/signin_controller.js"></script>
  <div data-role="header">
    <h3>Sign In</h3>
    <a href="#" data-icon="arrow-l" data-rel="back">Back</a>
  </div>
  <div data-role="content">
    <a id="signinBtn" href="#" data-role="button" class="ui-disabled">Sign In</a>
  </div>
</div>

その他のスクリプト コードは、signin_controller.js で説明されています。

function enableSigninBtn(inputEl){
    if(inputEl.val().length==0){
        $("#signinBtn").addClass("ui-disabled");
    }
    else{
        $("#signinBtn").removeClass("ui-disabled");
    }
}
................
................
$('#signinPageId').on('pagebeforeshow',function(){
    $('#emailForm').bind('keyup',function(){
        if($(':input[type=password]').val().length)
        {
            enableSigninBtn($(this));
        }
    });
    $('#passwordForm').bind('keyup',function(){
        if($(':input[type=email]').val().length)
        {
            enableSigninBtn($(this));
        }
    });
    $('#signinBtn').bind('click',function(){
        initSignIn($(':input[type=email]').val(),$(':input[type=password]').val());
    });
});

だから私はマニフェストファイルでcspを定義します

"csp" : "default-src *; script-src 'self' 'unsafe-eval'; object-src 'none'; style-src 'self' 'unsafe-inline'",
"default_locale": "en",
"type": "privileged",
"permissions": {
    "systemXHR": {
        "description": "Required for comunication with otehr sever"
        }
     }

この csp を回避するにはどうすればよいですか?

4

3 に答える 3

3

MDN で特権アプリの CSP ルールに関する情報を見つけることができます: https://developer.mozilla.org/en-US/docs/Web/Apps/CSP

unsafe-evalあなたが貼り付けたCSPポリシーエラーが安全でないevalについて不平を言っているので、あなたを含めることでこのエラーが発生していると思います。

于 2013-05-30T17:48:38.663 に答える
1

jQuery AJAX 呼び出しを使用する代わりに、次のように XHR を使用してログイン サービスを直接呼び出すことができます。

var xhr = new XMLHttpRequest({mozSystem: true});

この方法では、jQuery の eval() を使用しません。

于 2013-06-04T10:08:48.637 に答える