2014-01-20 3 views
3

Первый раз, используя сайт, чтобы задать вопрос. Я новичок в расширениях Chrome, поэтому я уверен, что делаю какую-то глупую ошибку. Я заранее извиняюсь.Хром Расширение почтовый запрос не отправляет данные

Я пытаюсь захватить URL-адрес текущей вкладки и отправить ее URL-адресу, который затем получит его и перетащит в базу данных. Как и моя личная служба закладок. Я отлаживал столько, сколько могу, данные делают все возможное, когда я отправляю свой запрос XHR .. но данные не выходят, когда я повторяю его на сценарии на стороне сервера. Я подтверждаю, что он ударяет по моему URL, потому что я консоль регистрирую вывод ... но снова данные не передаются.

BACKGROUND.JS

chrome.runtime.onMessage.addListener(function(request, sender, callback) { 
    if (request.action == "xhttp") { 
     var xhttp = new XMLHttpRequest(); 
     var method = request.method ? request.method.toUpperCase() : 'GET'; 
     xhttp.open(method, request.url, true); 
     xhttp.send(request.data); 
     xhttp.onload = function() { 
      callback(xhttp.responseText); 
     }; 
     return true 
    } 
}); 

manifest.json

{ 
    "name": "bookmarker", 
    "version": "0.0.1", 
    "manifest_version": 2, 
    "description": "POSTIN BOOKMARKS!", 
    "homepage_url": "URL", 
    "icons": { 
    "16": "icons/icon16.png", 
    "48": "icons/icon48.png", 
    "128": "icons/icon128.png" 
    }, 
    "permissions": [ 
    "contentSettings", 
    "cookies", 
    "tabs", 
    "geolocation", 
    "http://*/*" 
    ], 
    "content_scripts": [ 
    { 
     "js": ["contentscript.js"], 
     "matches": ["http://*/*"] 
    } 
    ], 
    "browser_action": { 
    "default_icon": "icons/icon16.png", 
    "default_popup": "popup.html" 
    }, 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    } 
} 

MAIN.JS

jQuery(function() { 
    jQuery('.reminded').on('click', function(e){ 
     e.preventDefault(); 

     chrome.tabs.query({currentWindow: true, active: true}, function(tabs){ 
      var url   = tabs[0].url, 
       date  = 1391048414, 
       clientId = 1234 
      chrome.runtime.sendMessage({ 
       method: "POST", 
       action: "xhttp", 
       url: "http://www.API.com/endpoint", 
       data: {url: url, date: date, clientId: clientId} 
      }, function(responseText) { 
       console.log(responseText); 
      }); 
     }); 
    }); 
}); 

Спасибо очень MUC h заранее за любой свет, который любой может поделиться.

+0

Почему используется 'background.js'? почему бы не поместить содержимое 'main.js' прямо в' background.js' – avi

+0

Я думаю, что это не полезно, но я попробовал ваш оригинальный фрагмент XMLHttpRequest, упрощенный всегда POST к определенному URI, и он отлично работал для меня. Спасибо за пример! –

ответ

6

Вы не указали, где использовалось «main.js», но я угадываю, что он используется на всплывающей странице, не так ли? Всплывающая страница также может выполнять междоменные запросы в расширении Chrome, если вы объявили разрешения в файле манифеста. Таким образом, просто использовать jQuery.ajax непосредственно сделать запрос междоменное:

jQuery.ajax({ 
    type: "POST", 
    url: "http://www.API.com/endpoint", 
    data: {url: url, date: date, clientId: clientId}, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

Для записи, код в ваш вопрос не удается, потому что вы пытаетесь представить объект JavaScript ({url: url, date: date, clientId: clientId} через .send метод в XMLHttpRequest. Это не имеет никакого смысла, и ваш сервер будет получать строку [object Object] из сериализации объектов по умолчанию.
чтобы получить исходный код, чтобы работать, вы должны использовать jQuery.param сериализовать данные формы и xhttp.setRequestHeader("Content-Type", "application/x-www-form-url-encoded");.

+1

Вы ОЧЕНЬ хороши в угадывании. Это был мой всплывающий javascript-файл, который был включен в popup.html. Я пошел с полным javascript решением, хотя в то время как googling (как сумасшедший), чтобы попытаться найти свой способ, многие люди сказали, что они не включили бы jQuery для чего-то настолько «тривиального», и отправка сообщений - более предпочтительный маршрут. Я также получил «мой путь» от вашего предложения, поэтому, если я расширю свое расширение, когда-либо знаю «предпочтительный» способ приблизиться к этому. МНОГО спасибо за то, что указали мне в правильном направлении. – dillondanger

+1

эй я сталкиваюсь с проблемой с этим типом кода. Что я действительно хочу сделать, так это отправить данные из моего расширения на мою собственную веб-страницу. Я использовал этот код. Но его давая ошибку: Не удалось загрузить ресурс: сервер ответил на статус 404 (не найден) для моей веб-страницы, пока он фактически запущен в Интернете –

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