This article mainly introduces how to solve the problem of communication between the parent page and the iframe page through pseudo-protocol. For more information, see the operations on the parent page and the iframe page. for example:
The content in this iframe is written in js. As shown in the following code:
var iframe = document.getElementById("iframe"), doc = iframe.contentWindow.document;doc.open();doc.write("---------something------");doc.close();
The above code is correct in most cases. However, the parent page explicitly writes document. domain = "xxx ";
In the ie series (IE10 has not tried), the error "no permission" will occur. In firefox, chrome is okay.
Why? This is a bug in ie, that is, when the parent page does not explicitly set document. domain, iframe will be consistent with the parent page by default, that is, both
Location. host, the parent and child pages can communicate, that is, the example of the article header, but when the parent page explicitly sets document. domain = "", the page in iframe must also explicitly set document. domain = "xxx", otherwise yes
No permission is granted to iframe.content+doc ument, that is, there is no way to dynamically write content. In fact, iframe can also be directed to a specific page, which explicitly sets document. domain = "xxx", and then start
But the problem is that my parent page has many such iframe, and the number is unknown (all advertising spaces), so it cannot be written through a specific page.
This is the problem. in this case, we seem to have no choice.
1. the parent page is set and must explicitly set document. domain
2. the content of the iframe page must be dynamically generated by js.
3. you have no chance to set src for iframe.
However, when all the above three conditions are met, we can solve such problems through pseudo-protocols.
The code is as follows:
Iframe. src = "javascript: void (function () {var d = document; d. open (); d. domain = 'XXX; d. write ('--- something'); d. close ()})())";
In this way, you can explicitly set the document. domain of iframe to be consistent with the parent page.
After writing this code, you do need to dynamically write iframe content, but this page will pop up separately, such as window. open ();
Why? This is also a bug in the ie series, that is, the parent page hasThe content written through the iframe pseudo protocol will pop up a new page like window. open,
HoweverIt must be _ self. Therefore, you can set the target of the base to _ self only before calling iframe. src. after the content is written, set the target of the base to _ blank.
This solves the problem.
Although pseudo-protocols can solve this problem, there are also some risks. if you do not have to, do not use this method.