There used to be some tweaks like applying sandbox attribute, for eg.
<iframe sandbox="allow-scripts allow-same-origin" src="" />or browser specific commands like --disable-web-security while lunching chrome
and some jQuery functions like
$('iframe#myIframe').contents().on("click","input#clickme",function(){alert('u click me');});Unfortunately, those may no longer work on modern browsers, one may want to apply further tricks to deal with security measures.
Thanks to HTML5 API's window.postMessage, below is a working example for Cross Domain - Html5 postMessage.
Let's say I'm running two web servers locally on port 81 and 8080,
we'll have something like http://localhost:81/site1/index.html
<input type="button" id="clickme" value="click me" onclick="doPostMessage();" /> <span id="data" style="color:red;"></span> <iframe id="site2" height="180" src="http://localhost:8080/site2/index.html" width="100%"></iframe> <script type="text/javascript"> function doPostMessage(){ frames[0].postMessage("Hello child!","http://localhost:8080/"); } window.onmessage = function(e) { console.dir(e); var data = "Parent: i ve got sth from child.\n Data: "; if(e.origin == 'http://localhost:8080') { data += e.data; } document.getElementById('data').innerHTML = data; } </script>And we have another page at http://localhost:8080/site2/index.html
<input type="button" id="clickme" value="click me" onclick="doPostMessage()"/> <span id="data" style="color:red;"></span> <script type="text/javascript"> function doPostMessage(){ parent.postMessage("Hello parent!","http://localhost:81/"); } window.onmessage = function(e) { console.dir(e); var data = "Child: i ve got sth from parent.\n Data: "; if(e.origin == 'http://localhost:81') { data += e.data; } document.getElementById('data').innerHTML = data; } </script>
Also, for security concerns, a must read article you can find it here.
Let's see a few slides embedded below if you want to read more about iframe communication.
No comments:
Post a Comment