Je travaille sur un site CMS dont le domaine est:
http://www.acmssite.com
Ils ont un sous-domaine où ils stockent un système de formulaire:
http://www.forms.acmssite.com
J'ai un iframe sur le premier qui regarde une forme dans le dernier.
Je dois exécuter des scripts pour manipuler le dernier à partir du premier et je me demandais si cela était possible.
Pour que cela ne soit pas limité par la même politique d'origine, vous devrez probablement le faire dans les deux pages:
document.domain = "acmssite.com";
Oui, ça l'est.
var iframe = document.getElementById("your-iframes-id").contentWindow.document;
Vous pouvez toujours contourner ce problème à l'aide de YQL même si vous n'avez pas accès à la partie en-tête de la fenêtre de réception. Avec la méthode Postmessage, vous devez également modifier le script de la fenêtre du destinataire. Mais en utilisant cette méthode, vous pouvez charger n’importe quel iframe sans toucher à leurs scripts. Regarde ça! jsfiddle-link
<html>
<iframe src="https://google.com/" width="500" height="300"></iframe>
<script>
var iframe = document.getElementsByTagName('iframe')[0];
var url = iframe.src;
var getData = function (data) {
if (data && data.query && data.query.results && data.query.results.resources && data.query.results.resources.content && data.query.results.resources.status == 200) loadHTML(data.query.results.resources.content);
else if (data && data.error && data.error.description) loadHTML(data.error.description);
else loadHTML('Error: Cannot load ' + url);
};
var loadURL = function (src) {
url = src;
var script = document.createElement('script');
script.src = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20data.headers%20where%20url%3D%22' + encodeURIComponent(url) + '%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=getData';
document.body.appendChild(script);
};
var loadHTML = function (html) {
iframe.src = 'about:blank';
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(html.replace(/<head>/i, '<head><base href="' + url + '"><scr' + 'ipt>document.addEventListener("click", function(e) { if(e.target && e.target.nodeName == "A") { e.preventDefault(); parent.loadURL(e.target.href); } });</scr' + 'ipt>'));
iframe.contentWindow.document.close();
}
loadURL(iframe.src);
</script>
</html>