5

我正在通过 jQuery 制作 firefox OS webApp。

应用程序类型具有使用 systemXHR 的特权。

所以我在清单文件中定义了权限。应用程序在模拟器上运行良好。

但是当我将应用程序推送到设备并单击任意按钮时,检测到 CSP 错误。

错误:错误:调用 eval() 被 CSP
源文件阻止:app://0cd689b3-a514-4a1c-b1c4-efe372189761/js/jquery-1.9.1.js 行:603

设备信息

  • 操作系统版本:1.1.0.0.-prerelease
  • 平台版本: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

实际上在 jquery 中有一个与此相关的未解决问题:http: //bugs.jquery.com/ticket/13862

使用 csp 的 Firefox OS 特权应用程序如下:“default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'”

( https://developer.mozilla.org/en-US/Apps/Developing/Packaged_apps )

因此,您无法在清单中使用该行来放松 CSP。

避免这种情况的唯一方法是使用符合 CSP 的框架。

于 2013-11-12T22:15:50.740 回答
3

您可以在 MDN 上找到有关特权应用程序的 CSP 规则的信息:https ://developer.mozilla.org/en-US/docs/Web/Apps/CSP

我认为包含unsafe-eval您会导致此错误,因为您粘贴的 CSP 策略错误是在抱怨不安全的评估。

于 2013-05-30T17:48:38.663 回答
1

您可以使用 XHR 直接调用登录服务,而不是使用 jQuery AJAX 调用:

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

这样你就不会使用 jQuery 的 eval()。

于 2013-06-04T10:08:48.637 回答