iframe dynamic src - javascript

I want to get updated url of iframe using javascript?
Like this:
<iframe src="http://yahoo.com" id="ifrm" onload="iframeurl()" ></iframe>
<script>
function iframeurl() {
var ifrm = document.getElementById("ifrm");
alert(ifrm.src);
}
</script>
but the code above doesn't work. How can I do this?
I'll use external links in iframe which is not hosted on same domain where I'm using the code above.
Please Help.
Thanks
thanks again. http://yahoo.com is just an example. Again my domain is szacpp.com and I need to get the links of other.com. You mean I need to put htaccess in other.com while I don't have access the domain.

The src attribute of an iframe will not update when the page changes within the iframe.
Your only option would be to query the document in the iframe, however that will only work if the page in the iframe comes from the same domain (otherwise you hit the same origin policy)
UPDATE
IF you have access to other.com, then you should be able to set Access-Control-Allow-Origin in the .htaccess file (assuming you are using a server that uses that file system).
You will find more information...
http://www.w3.org/TR/cors/#access-control-allow-origin-response-header
http://enable-cors.org/
Access-Control-Allow-Origin Multiple Origin Domains?
If you do not have access to other.com then you are simply out of luck. It will be impossible for you to know what the new page is, because the src attribute of the iframe will not be updated when the page changes within the iframe. And you will not be able to use JavaScript due to the same origin policy that I (or more precisely, Quentin) mentioned earlier.

try this :
<iframe src="http://yahoo.com" id="ifrm" onload="iframeurl()" ></iframe>
<script>
function iframeurl() {
var ifrm = parent.document.getElementById("ifrm");
alert(ifrm.src);
}
</script>

Related

Edit iframe content with jquery

i am trying to edit content from iframe using jquery but nothing really seems to happen. Can anyone explain why please?
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<iframe src="//api.jquery.com/" width="80%" height="600" id="frameDemo"></iframe>
<script>
$( "#frameDemo" ).contents().find( ".page-title" ).text('My html');
</script>
You cannot access or manipulate content from another domain in this way. This is blocked by something called the same-origin policy.
As the MDN page on this subject states, the same-origin policy restricts how a document or script loaded from one origin can interact with a resource from another origin. It is a critical security mechanism for isolating potentially malicious scripts.
It is however possible to manipulate the HTML of an iframe that is on the same domain. You'd do that like this:
$("#frameid").contents().find("div").html('My html');
See here: Change HTML of an iFrame with jQuery?

How to change content of website loaded in iframe?

I need to change content of website using jQuery loaded in iframe from other domain such this:
<html>
<head>
</head>
<body>
<iframe src="site.com/somepage.html></iframe>
<script>
$('iframe').find('div#message').value('hello');
</script>
</body>
</html>
Also I added target link to whitelist.
Could any helps? Thanks.
If you want to get a website of different domain you have to use parser in your server side which will parse the html from the website and then echo the parsed html to your client side
Due to cross-site attack/mocking securities, for a long time this is no more possible in the mainframe browsers (Chrome, IE, Fire) with domains diferent of your own.
You could achieve that thru proxying, by proxying I mean, using a server side solution where you get the HTML generated by "site.com" and outputs it as was in your domain.
Your script is running during runtime so it will not find the DOM of the iframe and will break. What you can do is create a function on your parent page like:
//On Your Parent page
function modifyIframeContent() {
$('iframe').find('div#message').value('hello');
}
Then call this function from the iframe after it loads.
// On Your Iframe page
window.onload = function() {
parent.modifyIframeContent();
}
Of course: Your iframe must be of same domain for this work.

How to access iframe javascript variable from parent page when accessing cross domain in iframe?

I want to access a java script variable in the iframe page. I want to access from both same domain and cross domain.
Javascript & HTML
function CallIframeVariable() {
var iframeVar = window.myIframe.myVar;
}
<iframe src="iframepage.html" onload="CallIframeVariable();">
iframepage.html:
<html>
<head></head>
<script>
myVar = "Manivasagan";
</script>
How can do it?
Use parent.iframeVar in you iframe, but that will only work if both iframe and main window is on same domain. Otherwise, it would not work due to cross-domain security policy.

Update URL from inside an iFrame

is it possible for javascript inside an iFrame to update the URL (hash) of the parent page (and retrieve it)
Does it have any permissions?
To further explain, I have no hosting for this domain, I can only set up an Iframe. I also cannot use a DNS config to get that page to display because of limitations of my hoster.
I also cannot transfer the domain to them to make that work because my clients wants to keep control of the domain.
Thank you for your help!
If the <iframe> page is within the same domain, probably yes. Otherwise you don't get access to the parent page due to cross-domain restrictions.
You can change the URL of the parent page though:
top.location.href = 'http://www.example.com';
due to security constraints you will not be able to access properties of the parent window IF the domain,port or protocol is different than the one in the iframe.
To be short, the answer is NO.
Your script works only inside the context of that iframe.
If you try for example,
var loc = document.location;
you will see what I mean.
One solution is that when you give the other side your iframe, you should add a script in witch you can do whatever you want, because it runs on their domain.
Maybe dynamically create the source of your iframe and stuff.

Get IFrame innerHTML using JavaScript

I'm trying to get an IFrame inner HTML using below code.
<iframe src="http://www.msn.com"
width="100%" height="100%" marginwidth="0"
scrolling="no" frameborder="0" id="divInfo"
onreadystatechange="MyFunction(this);"></iframe>
JavaScript code is
function MyFunction(frameObj)
{
if (frameObj.readyState == "complete")
{
alert(frameObj.document.body.innerHTML);
}
}
But the alert shows me the html of current document. How can i get the inner HTML of iframe when the frmae ready state is complete.
If i use alert(frameObj.contentWindow.document.body.innerHTML); it gives me Access is denied error.
Thanks in advance.
Access is denied error is caused by the same origin policy.
Since your page is hosted on http://www.example.com/ (For example), if you try to access details on http://www.msn.com/, the browser won't let you since they are from 2 different domains.
However, if you are trying to access data from the same domain - Hosting page: http://www.example.com/index.html, IFrame's page: http://www.example.com/iframe.html, then you should be able to get the content.
For more information on the Same Origin Policy, here's a link: http://en.wikipedia.org/wiki/Same_origin_policy
BTW, you may want to use frameObject.contentDocument instead
<script type="text/javascript">
function documentIsReady(frameObject) {
alert(frameObject.contentDocument.body.innerHTML);
}
</script>
... and you can also use the onload instead of onreadystatechange...
<iframe src="iframe.html" onload="documentIsReady(this);"></iframe>
You can't read the contents of an <iframe> that has content from a different domain than that of the parent page.
You can only do that if it adheres to the same origin policy (meaning the iframe is at the same server as the parent document).
Anyway, this was answered here :)
As has been said previously, you cannot get the contents of an <iframe> if its source is not from the same origin.
This also applies to most other ways of getting external content, such as using ajax to load source code from another page. ie: $('#div').load('http://www.google.com');
To load external content, the content must comply with the same origin policy.
This means that the content must be on the same protocol and host.
Wikipedia Article Linked Above:
httpː//www.example.com/dir/page2.html --> Success Same protocol and host
httpː//www.example.com/dir2/other.html --> Success Same protocol and host
httpː//username:password#www.example.com/dir2/other.html --> Success Same protocol and host
httpː//www.example.com:81/dir/other.html --> Failure Same protocol and host but different port
https://www.example.com/dir/other.html --> Failure Different protocol
http://en.example.com/dir/other.html --> Failure Different host
http://example.com/dir/other.html --> Failure Different host (exact match required)
http://v2.www.example.com/dir/other.html --> Failure Different host (exact match required)
Simply put, it must be on the same website. So while example.com/hello.html can load content from example.com/goodbye.html, it could not load content from google.com/content.html
Also, it must be on the same domain. Sub domains are considered to VOID the same domain policy so while weebly.com/hello.html can load content from weebly.com/goodbye.html, it could not load content from user1.weebly.com/content.html
There are of course workarounds, as usual, but that's another story all together. Actually, this is quite relevant to the question. So here is a wonderful questions 'thread' on all the ways to bypass it.

Categories