2014-08-26 3 views
1

Я разрабатываю приложение Chrome, которое делает серию запросов к моему API с помощью jquery.ajax. С разрешения URL-адрес для апи, установленного в манифесте, это прекрасно работает:Chrome app jquery AJAX запрос не отправляет пользовательские заголовки

"permissions": [ 
    "https://example.com/*", 
    "http://example.com/*" 
] 

Однако, когда я пытаюсь загрузить это на панели инструментов разработчика Chrome, я получаю ошибку:

The field permissions.https://example.com/ is not allowed in manifest. 

Я предположил, что это связано с тем, что приложения Chrome переходят на модель CORS, хотя разрешение на URL по-прежнему shown in the documentation. Я пытаюсь реализовать CORS.

{ 
    "name": "My Extensions", 
    "version": "1.0.7.5", 
    "manifest_version": 2, 
    "app": { 
     "launch": { 
      "local_path": "pages/index/index.html"   
     } 
    }, 
    "description": "Extension description.", 
    "content_security_policy": "script-src 'self'; object-src 'self'; connect-src self https://example.com http://example.com", 
    "icons": { 
     "16": "images/msp-16.png", 
     "128": "images/msp-128.png", 
     "256": "images/msp-256.png" 
    }, 
    "minimum_chrome_version": "14", 
    "permissions": [ 
     "tts", 
     "unlimitedStorage", 
     "storage" 
    ] 
} 

И Аякса запрос:

$.ajax({ 
    cache: false, 
    crossDomain: true, 
    async: false, 
    headers: { 
     'apikey': 'myapikey' 
    }, 
    url: 'https://example/api/auth/', 
    type: 'POST', 
    data: { 
     data: xmlToSubmit 
    }, 
    success: function(xml) { 

     //Do the thing 

    }, 
    error: function(xhr) { 

     //Do the other thing 

    } 
}); 

Я прочитал много документации, включая HTML Rocks. Я отправляю пользовательский заголовок «apikey». Сервер настроен как:

Header set Access-Control-Allow-Origin: "*" 
Header set Access-Control-Allow-Methods: "POST, GET, OPTIONS" 
Header set Access-Control-Allow-Headers: "apikey" 

Когда я делаю запрос в из приложения, возвращается сообщение об ошибке, как заголовок apikey не был отправлен. Я получаю ожидаемое сообщение об ошибке xml, которое генерирует api. Я проверил использование Fiddler, и заголовок apikey не отправляется. Я могу отправлять успешные запросы на свой api с другими клиентами REST для расширения Chrome, и мне не нужно устанавливать заголовки серверов для других приложений, отправляющих запросы на api, а также когда я использовал исходные разрешения.

Что мне не хватает? Это просто провал? Я пропустил что-то очевидное в первоначальных разрешениях, которые позволили бы его загрузить?

+0

Я не уверен, что ваш вопрос здесь. – Xan

+0

Aha. Это интересно. Вы проявляете соответствие «устаревшему пакетному приложению», так как оно имеет ключ «app.launch», а не ключ «app.background». [Это сообщение в блоге] (http://blog.chromium.org/2012/11/restricting-extension-apis-in-legacy.html) объясняет, почему ваш первый манифест не работает. Есть ли причина, по которой вы не используете приложение Chrome для нового стиля? – Xan

+0

Кудрявые скобки не загружаются, должны быть квадратные скобки: [link] https://developer.chrome.com/extensions/manifest –

ответ

0

Это было разрешено с помощью того, на что намекали @xan и @sowbug. Изменяя манифеста вызвать запуск фонового скрипта в качестве «нового» упакованного приложения, и сделать некоторые незначительные изменения в коде, это работало мечта:

"app": { 
    "background": { 
     "scripts": ["launch.js"] 
    } 
}, 

Разрешение URL для доступа к API был добавлен назад в манифесте

"permissions": [ 
    ... 
    "https://example.com/", 
    "http://example.com/", 
    .... 
], 

Я также должен был удалить этот параметр из запроса JQuery AJAX:

async: false; 

после I read this.