У меня есть ситуация, когда у меня есть веб-приложения на двух разных серверах, где App1 содержит App2 в IFrame. Любые ссылки в App2 могут иметь атрибут target="_parent"
, который позволяет этим ссылкам открываться в верхнем окне. Тем не менее, я не могу найти способ получить такое же поведение в Javascript. Я нашел эту страницу, в которой утверждается, что дочерний фрейм может вызывать javascript в родительском фрейме с помощью parent.foo()
, но это не похоже на работать в IE8 или FF3.5. Я нашел этот вопрос SO, в котором объясняется, как работает эта модель безопасности. Но кажется странным, что я не могу сделать в Javascript то, что я могу сделать с простым тегом <a>
. Есть ли какое-либо обходное решение для этого? Я знаю о window.postMessage, но (насколько я знаю ) это работает только в Firefox.
Пример
server1/test.html
<html>
<head>
<script type="text/javascript">
function myCallback(foo) {
alert(foo);
}
</script>
</head>
<body>
<iframe src="http://server2/test2.htm" width="400" height="150"></iframe>
</body></html>
server2/test2.html
<html><body>
<script>
function clickit() {
parent.document.location = "http://www.google.com"; //not allowed
parent.myCallback("http://www.google.com"); //not allowed
}
</script>
<p>This should be in an iFrame!</p>
<p><a href="#" onclick="location.href='http://www.google.com'; return false;" target="_parent">normal link (works)</a></p>
<p><a href="javascript:clickit()">javascript link</a></p>
</body></html>