8

De acuerdo con extensiones de cromo API llamadas de origen cruzado utilizando objeto XMLHttpRequest se debe permitir si se establecen permisos:origen cruzado XMLHttpRequest en extensiones de cromo

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

estoy siguiendo de cerca the tutorial pero el código de abajo 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 que la solicité en cualquier sitio web pero todavía 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(); 
} 
+0

Tuve un problema similar. El mío tenía que ver con no configurar los permisos entre dominios en el manifest.json. Añadiré http://developer.chrome.com/extensions/xhr.html para que otros puedan encontrarlo. – Jono

Respuesta

24

dos cosas; debes asegurarte de que estás haciendo una aplicación/extensión empaquetada y no una alojada. Las solicitudes de origen cruzadas no funcionarán con aplicaciones alojadas. Suponiendo que tiene esa parte inmovilizada, puede intentar poner lo siguiente en sus permisos: http://*/. Es el único que tengo para una de mis aplicaciones empaquetadas, y cruza el origen sin ningún problema.

+3

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

+1

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 igual que una aplicación, etc. –

+4

¿Qué son las extensiones empaquetadas y alojadas? –

Cuestiones relacionadas