Cross sub domain iframes et JavaScript

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 une iframe sur la première qui regarde une forme dans la dernière.

j'ai besoin d'exécuter des scripts pour manipuler le second depuis le premier et je me demandais si c'était possible?

23
demandé sur p.campbell 2011-05-18 18:41:18

3 réponses

pour que cela ne soit pas restreint par la même politique d'origine, vous aurez probablement besoin de le faire dans les deux pages:

document.domain = "acmssite.com";
60
répondu Dark Falcon 2011-05-18 14:46:36

Oui, il est.

var iframe = document.getElementById("your-iframes-id").contentWindow.document;
2
répondu Cobra_Fast 2011-05-18 14:44:07

Vous pouvez toujours contourner ce problème avec 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 éditer le script de fenêtre du destinataire. Mais en utilisant cette méthode, vous pouvez charger n'importe quel iframe sans toucher à leurs scripts. Check this out! jsfiddle-lien

<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>
0
répondu Gihan Gamage 2018-08-03 03:25:56