XMLHttpRequest de origen cruzado en extensiones de Chrome

2 minutos de lectura

XMLHttpRequest de origen cruzado en extensiones de Chrome
cerilla

De acuerdo con las extensiones de Chrome API, las llamadas de origen cruzado que usan el objeto XMLHttpRequest deben permitirse si se establecen los permisos:

Una extensión puede hablar con servidores remotos fuera de su origen, siempre que primero solicite permisos de origen cruzado.

estoy siguiendo de cerca el tutorial pero el siguiente código me está dando un mensaje de error:

XMLHttpRequest no puede cargar http://www.google.com/search?hl=en&q=ajax. Origin chrome-extension://bmehmboknpnjgjbmiaoidkkjfcgiimbo no está permitido por Access-Control-Allow-Origin.

No solo permití la solicitud a google.com, sino también la solicitud a cualquier sitio web, pero aún no puedo acceder. ¿Alguien puede ayudar?

Mi archivo de manifiesto:

{
  "name": "The popup",
  "version": "0.1",
  "popup": "popup.html",
  "permissions": [
    "http://*/*",
    "https://*/*",
    "https://www.google.com/*",
    "http://www.google.com/*"
    ],
  "browser_action": {
    "default_icon": "clock-19.png",
    "default_title": "This is title",
    "default_popup": "popup.html"
  }
}

la llamada real:

function sendRequest() {
    document.write("Sending request");
    var req = new XMLHttpRequest();
      req.open("GET", "http://www.google.com/search?hl=en&q=ajax", true);
      req.onreadystatechange = function() {
          if (req.readyState == 4) {
            if (req.status == 200) {
              alert(req.responseText);
              document.write("OK");
            }
          }
        };
      req.send();
} 

Dos cosas; debe asegurarse de que está creando una aplicación/extensión empaquetada y no una alojada. Las solicitudes de origen cruzado no funcionarán con aplicaciones alojadas. Suponiendo que haya fijado esa parte, es posible que desee intentar incluir lo siguiente en sus permisos: http://*/ . Ese es el único que tengo para una de mis aplicaciones empaquetadas, y hace cosas de origen cruzado sin ningún problema.

  • ¡Bingo! El tutorial que estaba siguiendo no menciona una palabra sobre el hecho de que debe empaquetarse para que xmlhttprequest de origen cruzado funcione correctamente. Supongo que esto es algo que debería haber sabido desde que nací. ¡Gracias!

    – cerilla

    23 feb. 12 a las 22:42

  • Sí, pasé por la misma prueba y error para resolverlo. Los documentos realmente deberían actualizarse para reflejar las diferencias entre las aplicaciones alojadas y empaquetadas, y posiblemente aclarar si una extensión es lo mismo que una aplicación, etc.

    – Marius Kjeldahl

    24 feb. 12 a las 12:14


  • ¿Qué son las extensiones empaquetadas y alojadas?

    – Capi Etheriel

    29 oct.

  • @barraponto referir desarrolladores.google.com/chrome/web-store/articles/…

    – llj098

    10 ene.

  • Tenga en cuenta que al instalar una aplicación que requiere permisos [“http://*/”], el usuario recibirá una advertencia “Esta aplicación: puede acceder a sus datos en todos los sitios web”. Los usuarios de mi aplicación están quemando la aplicación con reseñas de 1 estrella en este momento :(.

    – José de Jong

    30 jul. 2014 a las 18:30


.

¿Ha sido útil esta solución?