2010-06-21 22 views
16

Estoy intentando acceder al DOM de un iframe que carga una URL externa. Por supuesto que recibo un error de "Permiso denegado" debido a la seguridad de dominio cruzado. ¿Cómo puedo hacer que esto funcione? Vi algo hecho con json (pero no puedo obtener una cadena json de mi fuente externa) y algo hecho con postmensaje de HTML5.jQuery cross domain iframe scripting

se puede ver en directo en: http://jsfiddle.net/QPBvJ/

El código es:

$(document).ready(function(){ 
    $('#get').live('click', function() { 

     var currentIFrame = $('#frameDemo'); 
     currentIFrame.contents().find("a").css("background-color","#BADA55"); 

     alert ("done") 
    }); 
    }); 

<iframe src="http://api.jquery.com/" width="80%" height="600" id='frameDemo'></iframe> 
<button id="get">Get</button> 

¿Cómo sería el de la forma más fácil de hacer este trabajo. Gracias

+0

Puede comprobar este post con una relacionada con las solicitudes de dominios cruzados: [Cargando la página html cruz de dominio con jQuery AJAX] ** (http: //stackoverflow.com/a/17299796/2247494)** – jherax

Respuesta

27

No hay forma de que esto funcione. A menos que el dominio externo al que intente acceder admita un procedimiento como C.O.R.S, JSONP o postMessage.

Hay algunas excepciones (como siempre):

Si usted está tratando con una aplicación web, por ejemplo, puede indicar a los usuarios que tienen que permitir el acceso a cross-domain-calls.

En Gecko/Firefox, por ejemplo, puede llamar

netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead') 

que permite que el navegador para acceder a dominios externos a través de ajax/iframes. En este escenario, un usuario tiene que establecer

signed.applets.codebase_principal_support 

a true bajo about:config para hacer este trabajo.

En el Internet Explorers de este mundo, hay un ajuste llamado algo así como allow cross-domain access profundamente oculto en la pestaña security, que debe ser ajustado a enable.

Chrome permite llamadas de varios dominios con un argumento de línea de comandos:

chrome.exe --disable-web-security 
+0

Ok, gracias por la información. Estoy trabajando en esto, debería funcionar. – Mircea

+0

Aquí puede encontrar información relacionada con las solicitudes de dominio cruzado: ** [Cargando la página html de dominio cruzado con jQuery AJAX] (http://stackoverflow.com/a/17299796/2247494) ** – jherax

Cuestiones relacionadas