2017-06-05 2 views
0

Je contrôle les deux domaines et je pourrais définir les politiques nécessaires. Le domaine dans l'iframe utilise à peu près les mêmes bibliothèques et j'espérais les supprimer du parent si possible.Puis-je accéder à javascripts à partir du parent iframe sur un autre domaine?

Pour être clair, je ne demande pas comment faire une demande inter-domaine. Je demande comment obtenir des scripts d'un parent d'iframe, quand le parent est sur un autre domaine.

Je reçois une erreur d'autorisation avec ce (essayer jQuery ici, mais même avec mes autres bibliothèques):

if (typeof(jQuery) == "undefined") { 
    var iframebody = document.getElementsByTagName("body")[0]; 
    var jQuery = function (selector) { return parent.jQuery(selector, iframebody); }; 
    var $ = jQuery; 
} 
$("<h1>Hello World</h1>").appendTo("body"); 

Cela fonctionnerait si elles étaient sur le même domaine. Je sais que ceci est inter-domaine et est bloqué pour des raisons de sécurité, mais étant donné que je contrôle les deux domaines et que ni l'un ni l'autre ne sont sensibles à la sécurité, je pourrais définir n'importe quelle politique comme laxiste.

Est-ce que cela peut être fait?

Répondre

0

Vous pouvez utiliser postMessage pour transmettre des informations entre les trames et leur fenêtre parente.

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

Vous devez exécuter le code pour modifier l'élément dans le domaine où il vit, mais vous pouvez définir un message post handlerler dans le parent pour le coup d'envoi.

// child window (iframe content) 
parent.postMessage("hi there", "https://parent.domain.here"); 


// parent window 
window.addEventListener("message", function(message){ 
    $("<h1>"+message+"</h1>").appendTo("body"); 
}); 
1

Si vous incluez les js de la même source dans les deux pages, il sera juste chargé une fois, mais seront accessibles sur les deux sites:

//parent/main.html 
<script src="jquery.js"></script> 
<iframe src="http://other/iframe.html"></iframe> 
<script> 
    $(document.body).html("wohoo"); 
</script> 

//other/iframe.html 
<script src="http://parent/jquery.js"></script> 
<script> 
    $(document.body).html("wohoo"); 
</script> 

Donc, si theyre accessible dans le iframe, le script est juste chargé une fois, et si vous accédez à chacun d'eux sans l'autre, cela fonctionnera aussi.