My main goal is:
Going to my application, open a link there in a new tab, make something in the new tab and send an event to the parent-main tab to refresh.
I have learned 2 techniques that doesn't do exactly what I need:
How can I pass an event from the child to the parent using tabs? I'd be happy for a specific example for javascript code in the parent and the child. It should work for cross-domain (for example: www.mydomain.com and bills.mydomain.com).
Is there a a jQuery solution I am missing?
From a child window or a small window once opened, we can transfer any user entered value to main or parent window by using JavaScript. You can see the demo of this here. Here the parent window is known as opener. So the value we enter in a child window we can pass to main by using opener.
Sending data from child iframe to parent window : Whenever you embed an iframe, the iframe will have a reference to the parent window. You just need to use the PostMessage API to send data via the window. parent reference of the parent window.
You just need to prefix “ window. opener. ” and write the same code that you will write in the parent window's HTML page to access its elements.
The following works for me in chrome, firefox, ie(didn't test more browsers)
assume 3 documents
at first set the domain-property of all 3 documents to mydomain.com
<script>
document.domain="mydomain.com";
</script>
in parent.html create a hidden iframe with a name-property of e.g. "hiddenframe". Also create some function that may later receive a response.
parent.html should now look like this:
<script>
document.domain="mydomain.com";
function fx(msg)//receives the response
{
alert(msg)
}
</script>
<iframe name="hiddenframe" style="display:none"></iframe>
<a href="http://bills.mydomain.com/child.html" target="_blank">click</a>
In child.html you'll now be able to load a document into the hidden iframe inside parent.html
<script>
document.domain="mydomain.com";
window.open('http://www.mydomain.com/dispatcher.html','hiddenframe');
</script>
(don't be confused in face of the use of window.open()
here, there will not open a new window, the page will be loaded into the iframe in parent.html)
In dispatcher.html you now may call the function inside parent.html
<script>
document.domain="mydomain.com";
parent.fx('you just got some response');
</script>
When you only need to reload the parent.html it's a little bit easier.
Again set the document.domain-property in parent.html and child.html(you don't need the iframe in parent.html and the dispatcher.html)
In parent.html also set the name-property of the window, e.g.
<script>
window.name="parentTab";
</script>
In child.html you now may access the parentTab
-window(tab)
<script>
document.domain="mydomain.com";
window.open('http://www.mydomain.com/parent.html','parentTab');
</script>
...or simply use "parentTarget" as target-property of a link or form in child.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With