it-swarm.com.de

Subdomain-iframes und JavaScript überqueren

Ich arbeite an einer CMS-Site, deren Domäne lautet:

http://www.acmssite.com

Sie haben eine Unterdomäne, in der sie ein Formularsystem speichern:

http://www.forms.acmssite.com

Ich habe auf dem ersten einen iframe, der ein Formular in letzterem betrachtet.

Ich muss Skripts ausführen, um Letzteres von der ersteren zu bearbeiten, und habe ich mich gefragt, ob das möglich ist?

24
RyanP13

Damit dies nicht durch dieselbe Origin-Richtlinie eingeschränkt wird, müssen Sie dies wahrscheinlich auf beiden Seiten tun:

document.domain = "acmssite.com";
62
Dark Falcon

Ja, so ist es.

var iframe = document.getElementById("your-iframes-id").contentWindow.document;
2
Cobra_Fast

Sie können dieses Problem immer noch mit Hilfe von YQL umgehen, auch wenn Sie keinen Zugriff auf den Header-Teil des Empfangsfensters haben. Bei der Postmessage-Methode müssen Sie auch das Empfängerfensterskript bearbeiten. Mit dieser Methode können Sie jedoch jeden iframe laden, ohne dessen Skripte zu berühren. Schau dir das an! 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>
0
Gihan Gamage