У меня есть сайт в «разрешениях», но я продолжаю получать «Origin chrome-extension: // abc не разрешен Access-Control-Allow-Origin». - PullRequest
5 голосов
/ 13 января 2012

Я запустил новое расширение на основе более старого, которое я написал ранее и которое теперь работает правильно.Схема выполнения xhr является довольно нормальной для расширений Google Chrome: контентный скрипт вызывает chrome.extension.sendRequest (data, callback), а фактический межсайтовый запрос выполняется в backround.html.

Также,Я убедился, что запрошенный сайт добавлен в раздел «разрешения» файла manifest.json.

Однако консоль background.html отображает: «... Исходное расширение chrome: // ..Access-Control-Allow-Origin не разрешает. "

Вопрос в следующем: кроме отсутствия целевого домена в" разрешениях "(я даже пытался даже здесь), Что еще может вызвать эту ошибку ?


Вот некоторые существенные фрагменты кода:

manifest.json:

{
    "name": "Register quote",
    "version": "0.0.2",
    "permissions": [ "<all_urls>" ],
    "background_page" : "background.html",
    "content_scripts": [
        {
            "matches": [
                "http://somedomain.com/*"
            ],
            "css": ["register_quote.css"],
            "js": ["jquery-1.3.2.min.js", "register_quote.user.js"]
        }
    ]
}

background.html: http://pastebin.com/0zLArvfA

register_quote.user.js:

// here's the final call, how it's prepared by the content script after all:
chrome.extension.sendRequest({
    'action': 'sendAjaxRequest',
    'url': "http://somedomain.com/the_script.php"
    'dataStr': "is_chrome=Y&ticketid=123123123&user=Vladimir+Mityukov&action=get_quoteids"
}, arg_callback);

PS: забыл упомянуть,в консоли backround.html также есть следующая ошибка:

 Error in event handler for 'undefined': TypeError: Cannot read property 'length' of undefined
    at setupPageActionEvents (chrome/ExtensionProcessBindings:424:36)
    at chrome/ExtensionProcessBindings:1021:5
    at [object Object].dispatch (chrome/EventBindings:182:28)
    at Object.<anonymous> (chrome/EventBindings:237:25)

Понятия не имею, что это за беспорядоквозраст означает, и какая часть моего кода может быть причиной этого. Сценарии, упомянутые здесь, не мои.

Ответы [ 2 ]

3 голосов
/ 14 января 2012

Это может быть вызвано какой-то странностью шаблона "<all_urls>", возможно, попробуйте изменить его на конкретный URL-адрес, по которому вы хотите позвонить:

См .: http://code.google.com/p/chromium/issues/detail?id=87671

"permissions": [ "http://somedomain.com/*" ]

В дополнение к этому теперь в скриптах контента разрешено выполнять вызовы XHR между источниками:

http://code.google.com/chrome/extensions/xhr.html

"Примечание к версии: Начиная с Chrome 13, скрипты контента могутотправлять запросы из разных источников на те же серверы, что и остальные расширения. До Chrome 13 контентный скрипт не мог напрямую делать запросы, вместо этого ему приходилось отправлять сообщение своему родительскому расширению с просьбой сделать перекрестное расширение.запрос источника. "

В этом случае вам потребуется добавить http://somedomain.com/ в список разрешений в манифесте.

1 голос
/ 06 августа 2012

Ответ выше неправильный, и я просто хотел бы уточнить для будущих читателей, поскольку у меня тоже была такая же проблема.

Это связано с тем, что Access-Control-Allow-Origin сервера не допускает Chrome: // тип расширения Origins.

Всякий раз, когда вы отправляете на сервер, у вас есть заголовок источника. Из расширений Chrome это «Chrome-extension //: blarg blarg blarg».

Многие серверы имеют «Access-Control-Allow-Origin», равный «*», поэтому в большинстве случаев вызовы API будут проходить.

Однако, если Access-Control-Allow-Origin требуется http-адрес или определенный домен, вы не сможете сделать так, чтобы он работал.

Он работает в скрипте содержимого, потому что у вас есть источник самого URL, который является «http://blarg blarg blarg».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...