2013-05-30 3 views
1

Я делаю firefox OS webApp jQuery.Firefox os привилегированное приложение ошибка: вызов eval() заблокирован csp в jquery 1.9.1

Тип приложения привилегирован для использования systemXHR.

Таким образом, я определяю разрешение в файле манифеста. Приложение хорошо работает на тренажере.

Но когда я нажимаю приложение на устройство и нажимаю любую кнопку, обнаружена ошибка CSP.

Error: Error: call to eval() blocked by CSP
Source File: app://0cd689b3-a514-4a1c-b1c4-efe372189761/js/jquery-1.9.1.js Line: 603

Информация об устройстве

  • версия ОС: 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" : "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" 
     } 
    } 

Как я могу избежать этого ПСА?

ответ

2

Вы можете найти информацию о правилах НСП привилегированных приложения на MDN: https://developer.mozilla.org/en-US/docs/Web/Apps/CSP

Думает, в том числе unsafe-eval вы вызываете эту ошибку, потому что ошибка СНТА политика вставил жалуется небезопасных Eval.

+0

Спасибо за ваш комментарий. Но нарушение csp происходит, за исключением небезопасных-eval. образец страницы не первая. поэтому я добавил тег

1

Вместо вызова JQuery AJAX, вы можете напрямую Вызов службы входа в систему с помощью XHR как:

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

Таким образом, вы не будете использовать Eval JQuery (в).

2

На самом деле есть открытая проблема, связанная с этим в JQuery: http://bugs.jquery.com/ticket/13862

Firefox OS привилегированных приложения с использованием ПСА, как это: «по умолчанию-Src *; скриптового-Src 'я', объект-Src«ни один «, стиль-Src„сам“ 'небезопасным-рядный»

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

Таким образом, вы не можете расслабиться ПСУ с этой линией в манифесте.

Единственный способ избежать этого - использовать инфраструктуру, совместимую с CSP.

Смежные вопросы