Editor’s note: This article was last updated by Joseph Mawa on 6 June 2024 to introduce alternatives to iframes, such as using the Fetch API to load dynamic content, in the case where you don’t want to risk the instability of iframes. It now also includes additional methods for ensuring iframe security, such as using the referrerpolicy
attribute in addition to the sandbox
and allow
attributes.
Introduced by Microsoft Internet Explorer in 1997 with HTML 4.01, the iframe element (short for inline frame) is among the oldest HTML tags. And though all modern browsers support them, many developers write endless articles advising against using iframes. Their bad reputation should not prevent you from relying on them, however, as they have many significant use cases. It is also not difficult to secure them, so you won’t have to worry about your user’s machine becoming compromised by using iframes.
To help you form your own opinion and sharpen your developer skills, this article will cover all the essentials you should know about this controversial HTML element. We’ll go through most of the features the iframe element provides and talk about how you use them, as well as how iframes can be useful for overcoming some tricky situations. Finally, we’ll talk about how you can secure your iframes to avoid potential vulnerabilities.
Developers mainly use the iframe
tag to embed an HTML document within another. You may have crossed paths with it when you had to include a third-party widget (like the famous Facebook “like” button), a YouTube video, or an advertising section on your website.
For example, the code below will display a 500px
square with a YouTube video inside:
<iframe src="https://www.youtube.com/embed/9xnnEktftxc" height="500px" width="500px"></iframe>
Here is another example in which we display a button to post on X:
<iframe src="https://platform.twitter.com/widgets/tweet_button.html" style="border: 0; width:130px; height:20px;"></iframe>
What you must remember when thinking about iframes is that they let you embed an independent HTML document with its own browsing context. Thus, it will be isolated from the parent’s JavaScript and CSS.
That is one of the valid purposes for using an iframe: to provide a measure of separation between your application and the iframe content. Nevertheless, as you will see in this guide, the separation is not perfect.
The iframe can still behave in annoying or malicious ways — triggering a popup or auto-playing videos, for example. To illustrate how this isolation from the JavaScript and CSS is handy, let’s take a look at two example scenarios.
In an application, a user could create emails and save them as templates. On a particular page, I needed to list them to let the user preview and choose one. And to prevent the CSS of the current website from affecting the style of these templates, I figured out that using an iframe with the srcdoc
attribute was the cleanest solution:
<iframe srcdoc="<html><body>The content you see here will never be affected by the CSS of its parent container. It's supposed to be rendered in black on a white background.</body></html>"></iframe>
The other situation when iframes helped me was when I built a WYSIWYG editor for a customer. But the thing with these editors is that you must find a way to maintain the focus and selection when the user is clicking on all the buttons across the interface.
Because an iframe offers an isolated environment, the focus or selection is never lost when you are clicking outside of it. By using communication events between the iframe and the parent (more on how to do so later in this article), I managed to easily design a powerful editor.
There are several attributes we can use to customize the behavior or styling of an iframe:
html <iframe src="https://google.com/" <!-- Sets the address of the document to embed --> srcdoc="<p>Some html</p>" <!-- Sets the HTML content of the page to show --> height="100px" <!-- Sets the iframe height in pixels --> width="100px" <!-- Sets the iframe width in pixels --> name="my-iframe" <!-- Sets the name of the iframe (mainly used to reference the element in JavaScript --> allow="fullscreen" <!-- Sets the feature policy for the iframe. --> referrerpolicy="no-referrer" <!-- Sets the referrer to send when fetching the iframe content --> sandbox="allow-same-origin" <!-- Sets the restrictions of the iframe (more on this below) --> loading="lazy" <!-- Specifies when the browser should load the iframe --> ></iframe>
You may find more than the ones listed above, but keep in mind that some are not supported in HTML5 anymore: align
, frameborder
, longdesc
, marginheight
, marginwidth
, and scrolling
.
Note that, by default, the iframe
element has a border around it. To remove it, you can use the style
attribute to set the CSS border
property to none
:
<iframe src="https://logrocket.com/" style="border: none;"></iframe>
When you are loading the iframe, the load
event comes in handy for improving user experience, like displaying a spinner or a specific message to indicate to the user that the iframe is still loading:
load
event: This is triggered when the iframe is fully loaded. In other words, all static assets have been downloaded, and all the elements in the DOM tree have fired their load
event. The load
event is always triggered even if the contents of the iframe fail to loaderror
event: For security reasons, and unlike other DOM elements, iframes do not trigger the error
event even if the contents of the iframe fail to loadYou can listen to the load
event with the onload
attribute:
<iframe src="https://logrocket.com/" onload="onLoad()"></iframe>
Or you can add the event listeners to your iframe programmatically in JavaScript:
// For a new iframe const iframe = document.createElement("iframe"); iframe.onload = function(e) { console.log("The iframe is loaded"); }; // or using the addEventListener method iframe.addEventListener("load", (e) => { console.log("The iframe is loaded"); }); iframe.src = "https://logrocket.com/"; document.body.appendChild(iframe); // For an existing iframe const iframe = document.querySelector('.my-iframe'); iframe.onload = function() { console.log("The iframe is loaded"); } // or using the addEventListener method iframe.addEventListener("load", (e) => { console.log("The iframe is loaded"); });
It is quite easy to send messages between the parent and the iframe; you have to use the postMessage
function.
In the following example, we demonstrate how to send a message from the parent to the iframe. This code snippet demonstrates how to send the message from the parent element:
const myiframe = document.getElementById('myIframe') myIframe.contentWindow.postMessage('message', '*');
And the following code illustrates how to listen to the message in the iframe:
window.onmessage = function (event) { if (event.data == "message") { console("Message received!"); } };
As for sending a message from the iframe to the parent, the following code demonstrates how to send the message from the iframe:
window.top.postMessage('reply', '*')
This code snippet shows how to listen to it in the parent:
window.onmessage = function (event) { if (event.data == "reply") { console("Reply received!"); } };
N.B., keep in mind that you can end up in some tricky situations when you need to debug something, as messages are fire-and-forget (i.e., there is no real error handling).
When you are using an iframe, you are most likely dealing with content from a third party over which you have no control. Thus, you are increasing the risk of introducing a vulnerability to your application or simply dealing with a bad user experience (like annoying video autoplay).
Thankfully, you can block or allow specific features by using the sandbox
and allow
attributes we discussed earlier.
A good rule of thumb is to always grant the minimum level of capability necessary to a resource to do its job. Security experts refer to this concept as “the principle of least privilege.”
sandbox
attributeYou can set the value of the sandbox
attribute to an empty string to restrict JavaScript and all the features in the table below. On the other hand, you can lift certain restrictions by setting the value of the sandbox
attribute to a space-delimited list of flags. Here is the complete list of iframe sandboxing flags and their purposes:
Flag | Details |
---|---|
allow-forms |
Allows form submission |
allow-modals |
Allows the resource to open new modal windows |
allow-orientation-lock |
Allows the resource to lock the screen orientation |
allow-pointer-lock |
Allows the resource to use the Pointer Lock API |
allow-popups |
Allows the resource to open new popups or tabs |
allow-popups-to-escape-sandbox |
Allows the resource to open new windows that will not inherit the sandboxing |
allow-presentation |
Allows the resource to start a presentation session |
allow-same-origin |
Allows the resource to maintain its origin |
allow-scripts |
Allows the resource to run scripts |
allow-top-navigation |
Allows the resource to navigate the top-level browsing context |
allow-top-navigation-by-user-activation |
Allows the resource to navigate the top-level browsing context, but only if initiated by a user gesture |
It is up to you to define which privileges you grant to each iframe. For example, if your iframe only needs to submit forms and open new modal windows, here is how you would configure the sandbox
attribute:
<iframe sandbox="allow-forms allow-modals" src="https://www.something.com/"></iframe>
It is recommended that you grant embedded content, including iframes, only the minimum privileges for them to do their job.
For a situation when the sandbox
attribute is configured, and one feature is not working correctly within the resource, it might be because it lacks a specific flag. Make sure you know more about them to debug things quickly.
As highlighted above, using an empty sandbox
attribute will fully sandbox the iframe. This means that the JavaScript inside the iframe will not be executed, and all the privileges listed above will be restricted (like creating new windows or loading a plugin).
The empty sandbox
attribute is mostly used for static content but will drastically reduce the capability required for the other iframe resources to work properly.
N.B., the
sandbox
attribute is unsupported in Internet Explorer 9 and earlier.
allow
attributeThe allow
attribute lets you enable and disable specific features in an iframe. These features include autoplay, access to the accelerometer interface, battery information, and the camera. Be sure to check Can I Use for details on cross-browser support.
Some of these features may be sensitive and intrusive, especially when you’re embedding content from a third party. They have implications for the security and privacy of your users. Therefore, you should only use iframes from trusted sources and grant them such sensitive permissions if you’re certain the content you embed in the iframe won’t violate the privacy of your users.
There are more than 25 available flags. I have summarized the most popular in the table below:
Flag | Details |
---|---|
accelerometer |
Allows access to the Accelerometer interface |
ambient-light-sensor |
Allows access to the AmbientLightSensor interface |
autoplay |
Allows the autoplay of video and audio files |
battery |
Allows access to the Battery Status API |
camera |
Allows access to the camera |
fullscreen |
Allows access to fullscreen mode |
geolocation |
Allows access to the Geolocation API |
gyroscope |
Allows access to the Sensors API Gyroscope interface |
magnetometer |
Allows access to the Sensors API Magnetometer interface |
microphone |
Allows access to the device microphone |
midi |
Allows access to the Web MIDI API |
payment |
Allows access to the Payment Request API |
usb |
Allows access to the WebUSB API |
vibrate |
Allows access to the Vibration API |
referrerpolicy
attributereferrerpolicy
is another attribute for handling security in iframes. Usually, when the browser requests a resource such as an image or iframe, it sends the full or partial address of the page requesting the resource in the Referer
request header:
Referer: <url>
The server can use the partial or full URL sent in the Referer
header to identify the page requesting the resource for analytics and resource optimization.
On the other hand, the Referer
header makes it easy to accidentally leak sensitive data such as passwords and usernames. If you load a third-party iframe in a page that contains sensitive data in the URL without proper referrer policy settings, you may accidentally expose private data.
You can use the referrer policy to control the data sent in the Referer
header. You can configure the referrer policy by setting the HTTP Referrer-Policy
response header to one of the values below:
Referrer-Policy: no-referrer Referrer-Policy: no-referrer-when-downgrade Referrer-Policy: origin Referrer-Policy: origin-when-cross-origin Referrer-Policy: same-origin Referrer-Policy: strict-origin Referrer-Policy: strict-origin-when-cross-origin Referrer-Policy: unsafe-url
The strictest value is no-referrer
. When you set the referrer policy to no-referrer
, the Referrer
header will be omitted. You can look up the interpretation of the other directives in the documentation.
If you don’t explicitly specify the referrer policy or when you set an invalid value, the browser defaults to strict-origin-when-cross-origin
.
You can also specify the referrer policy in HTML using the <meta>
tag. It sets the referrer policy for the entire document:
<meta name="referrer" content="no-referrer" />
You can also set the referrer policy for individual iframes like so:
<iframe> src="http://example.com" referrerpolicy="no-referrer">…</iframe>
If you don’t securely configure your referrer policy, you may accidentally leak sensitive information. Among other measures, it’s recommended you avoid using iframes from third parties on pages that contain login and payment forms. You can also set the referrer policy to no-referrer
or other more secure options.
If a browser does not support an iframe, it will display the content between the opening <iframe>
tag and closing </iframe>
tag.
Thus, you should always think about placing a warning message as a fallback for such users:
<iframe> <p>Your browser does not support iframes.</p> </iframe>
As we mentioned earlier, browsers render iframes with a border by default. You can remove the border using CSS by setting the border
property to none
:
<iframe src="https://logrocket.com/" style="border: none;"></iframe>
There’s a lot of speculation around this subject.
For a long time, crawlers could not understand iframes, but this is no longer the case. The most relevant answer I found was from this article, and today’s conclusion seems to be:
Since search engines consider the content in iframes to belong to another website, the best you can hope for is no effect. iframes tend to neither help nor hurt your search engine ranking.
Thus, it is best to assume that the content displayed via iframes may not be indexed or available to appear in Google’s search results. A workaround would be to provide additional text-based links to the content they display so that Google crawlers can find and index this content.
N.B., you should also not worry about duplicate content issues because today’s web crawlers usually recognize that.
Every iframe on a page will increase the memory used, as well as other computing resources like your bandwidth. So you should not use iframes excessively without monitoring what’s going on, or you might end up harming your page performance.
To avoid having your iframes slow down your pages, a good technique is to lazy load them (i.e., loading them only when they are required, like when the user scrolls near them). This can be achieved easily just by adding the loading="lazy"
attribute to the tag.
All modern desktop browsers support lazy loading. However, support is lacking in some mobile browsers. For something that works everywhere, you may be interested in the LazyLoad library:
<iframe src="https://logrocket.com/" loading="lazy"></iframe>
N.B., the
loading="lazy"
attribute also works with theimg
tag, in case you didn’t know that already. 😜
Easy peasy lemon squeezy! As you can access the window element of the iframe with contentWindow
, you have to do this:
// Get the iframe const iframe = document.getElementById('myIframe'); // Reload the iframe iframe.contentWindow.location.reload();
As explained above, you can work with iframes in JavaScript like any other HTML element. You can use the contentWindow
property to access the window object of the embedded iframe from the parent if both are from the same origin:
const iframe = document.getElementById("my-iframe"); iframe.addEventListener("load", (e) => { iframe.contentWindow.document.body.style.backgroundColor = "yellow"; });
After accessing the iframe’s document
object, you can use JavaScript to manipulate its contents from the parent as in the example above. Similarly, an iframe can access its parent using the window.parent
property.
However, you need to be aware that this is only possible if the iframe has the same origin as its parent. For different origins, accessing the contentWindow.document
will throw an error. If the iframe and its parent are from different origins, you need to use the postMessage
method explained in one of the previous sections.
Instead of accessing the embedded iframe document using the iframe.contentWindow
property like in the above example, you can also use the iframe.contentDocument
property directly like so:
const iframe = document.getElementById("my-iframe"); iframe.addEventListener("load", (e) => { iframe.contentDocument.body.style.backgroundColor = "yellow"; });
You need to wait for the iframe to fully load before accessing and manipulating its DOM. Therefore, you need to wait for the load
event to fire. The load
event is emitted after fully loading the iframe and its resources.
As mentioned above, iframes come in handy for embedding content like videos. However, these iframes come with potential security vulnerabilities and overheads such as bandwidth and memory usage. Because of these drawbacks, it would be helpful to know some iframe alternatives.
These alternatives may not have all the features of iframes but they can be useful replacements in certain use cases so that you don’t need to deal with the risks and overhead of using iframes.
Use the Fetch API when dealing with dynamic content instead of loading iframes. You fetch data from an external source using the Fetch API instead of loading them in iframes.
This gives you the freedom to render and style the content flexibly because, unlike iframes, the content you load via the Fetch API is headless. You can then render the content using the relevant HTML elements, therefore removing the need for iframes and their associated drawbacks.
With HTML5 web components, you can create custom reusable components that you can import into your project, therefore removing the need to use iframes for loading simple same-origin HTML markup. It also gives you total control over the styling and behavior of the component.
As explained above, it is not uncommon for sites to embed third-party widgets such as the “Post” button from X using iframes. Because each iframe you load comes with its own resource, it increases your site’s bandwidth and memory usage.
You can easily recreate some of these widgets using basic HTML elements and JavaScript, removing the need to load third-party iframes.
Most of the time, a screen reader will indicate that an iframe is present on the page. Many will even enable you to navigate inside. If your iframe does not contain another webpage but instead contains external content like a video player or an ad, it is essential to add a title to the tag to give users more context for what the iframe is about:
<iframe src="an_ad.html" title="I contain an advertisement"></iframe>
Some will say that this attribute is not essential because most screen readers will only read the document’s title when available and skip the title attribute on the iframe tag. However, for the same title to be read correctly across various screen readers, it is good practice to provide both and to make sure they match.
Another thing to keep in mind is that when your iframe includes non-readable content (like, for example, a video game built with JavaScript), you will have to hide its contents from screen reader users using the aria-hidden
attribute:
<iframe src="a_video_game.com" title="I contain a video game" aria-hidden="true"></iframe>
We talked about this at the beginning of this guide, but make sure to include some content inside the iframe for all the older browsers that do not support them. This will give more context to everyone about what should be displayed in the space:
<iframe> <p>Your browser does not support iframes.</p> </iframe>
I hope this guide has helped you to improve your knowledge of iframes.
While they can be insecure if you’re loading untrusted content, they also offer some significant advantages. So you should not ban them entirely from your developing arsenal but only use them in relevant situations.
If you have anything to add to this article, you can reach me in the comments below or just ping me on X @RifkiNada.
Hey there, want to help make our blog better?
Join LogRocket’s Content Advisory Board. You’ll help inform the type of content we create and get access to exclusive meetups, social accreditation, and swag.
Sign up nowLearn how to manage memory leaks in Rust, avoid unsafe behavior, and use tools like weak references to ensure efficient programs.
Bypass anti-bot measures in Node.js with curl-impersonate. Learn how it mimics browsers to overcome bot detection for web scraping.
Handle frontend data discrepancies with eventual consistency using WebSockets, Docker Compose, and practical code examples.
Efficient initializing is crucial to smooth-running websites. One way to optimize that process is through lazy initialization in Rust 1.80.
46 Replies to "The ultimate guide to iframes"
Seamless attribute was removed from both W3C and WHATWG hrml specs, and implementation was removed from the browsers due to the security and other reasons https://caniuse.com/#feat=iframe-seamless
Missing guide: how to make iframe height automatically use it’s content height 🤔
Thank you for the information, I thought it was only experimental for the time being.
Hello Ariona, what do you mean exactly? 🙂
Nada, great art. Thanks. Just remove unnecessary “)” from postMessage link.
Nice catch. All set.
You talked nothing about “friendly iframe” when the iframe source is and that we do not need to send message events as those iframes can get all functionality from the parent window object…
Thank you, Nada, for this informative article! A helpful addition would be addressing accessibility issues with iframes.
There is a lot to be said about WCAG conformance an iframes. Technique H64: Using the title attribute of the frame and iframe elements (https://www.w3.org/TR/WCAG20-TECHS/H64.html) addresses how this applies to WCAG Success Criteria 2.4.1 Bypass Blocks (level A) and 4.1.2 Name, Role, Value (level A). While conformance is more nuanced than a pass/fail, at least acknowledging the challenge and risk of being flagged by automated accessibility testing tools should be in this article.
I have a question.
I’m using an iframe to load a media file. Click the link to the file and it loads into the named iframe.
My link has a target=”media” attribute on it and the first video loads fine. However when I try to load the second video it will not load in the iframe, it loads in a new tab.
Just wondering how you got the google.com example to work. I get a “Blocked by X-Frame -Options Policy” for google, and “Blocked by Content Security Policy” for some other domains that I tried, But the Twitter button and the Logrocket examples work fine. I am using localhost/ 127.0.0.1 for testing, which might be the issue.
I have a lot of content on my site, and I recently implemented the use of (loading=”lazy”) to defer the loading of an iframe until the viewer opens the window. I noticed that it did not interfere with the laoding of the iframe content, however, the code was flagged as “not allowed” when validating my html. I also noticed that when using speed testing sites such as Google insights and GTMetrics, the browser is seeing and loading the content within the iframe even though I am using the lazy loading tag in the iframe?
Hi Don, can you tell me which browser (and version) you’re using ?
Hi, thanks for this guide, really interesting. You wrote “Because an iframe offers an isolated environment, this means that the focus or the selection is never lost when you are clicking outside of it.”
I am actually facing a situation where my iFrame is losing its focus when clicking elsewhere… Any way to prevent that ?
Hi, thanks for this comprehensive iframe documentation , But frankly , I was looking for an answer to a difficult question , a question that no one online , even the Top Programming websites , could answer it till now ..
This question is , how can we play a video game inside iframe , without the keyup or keydown forcing the whole page to scroll up or down , instead of focusing inside the iframe ?
Why don’t you simply disable the scroll when people are using the keyboard arrows? Something like https://stackoverflow.com/questions/8916620/disable-arrow-key-scrolling-in-users-browser
If you want to check when an iframe is not focused anymore, you can check this thread https://stackoverflow.com/questions/5456239/detecting-when-an-iframe-gets-or-loses-focus Then, you only have to refocus the iframe with javascript when it happens
Hi,
Thanks for this excellent information with unique content and it is very useful to know about the information based on comprehensive iframe documentation.
Hi,
Thanks for your guide! I tried to use it for error handling if the iFrame could not be loaded, but this does not seem to be possible, since the onerror event never gets triggered. Ans it also seems like (at least for Chrome), they are not going to fix that: https://bugs.chromium.org/p/chromium/issues/detail?id=365457
Is there something im missing?
Thank you, Nada, for this informative article! A helpful addition would be addressing accessibility issues with iframes.
Any idea how to use IFRAME in windows application?
Yes , it worked that way . Thanks again .
thx Nada – I really like the overview quality of your article.
if I integrate content via iFrame into a WP page is there a way I can avoid thrd parties to open the iFrame content without opening the complete page?
Can you please tell me how we can display a PDF file inside the iframe html element without download & print option in the frame window?
For some you can’t use external resources from iframe using a development server, especially when trying to fetch resources from Google. As a security measure google doesn’t allow that… hence a development server with a “localhost” in it’s domain is automatically blocked. There is a way to trick the system by changing your “localhost” domain or using https, I read somewhere tho I never actually tried it before just a friendly coder who stumbled on this article to learn more about iFrames.
Hello. Great post. I had a question about using iframe and jump links together. I am building a recipe site with a list of links to recipes from different sites. When the links are clicked the recipes are displayed within the iframe window at the top of the same page. I wanted to add jump links so the user to taken to the top of the page where the recipe is being displayed. Any suggestions?
set your target attibute: target=’_parent’
Great Article Nada – well done. I came to the sight to get some information on how cookies work within an iframe. I’m using .Net Core 2.2. and application (session) cookies are not being recognized in the same way as if the application runs outside the iframe. Any insight on cookie limitations and using sameSite=None/Lax/Strict (etc), and the meaning of these would be a great add to your article.
Cheers!
im trying to add a iframe into elementor on wordpress and i cannot figure out to adjust the height, there is also a rule for scrolling in a an iframe i didnt see that here.
I wrote a set of pages a while ago. In fact last changed 2011! Now I am trying to resurrect them. But they were built around frameset(s) and frame(s) – I did write a kind of “file explorer”. I can work out what to change. But the main problems is how to move the iframe to be along the right, e.g. width=85% but I can’t see (in several different pages) how to have the iframe set right. I’ve seen talk of attribute object-position, but I can’t how to work it.
Help!
nice guide. got the info, what im looking for.
I’ve done all I want, almost…(I worked out the rightside by using tables).
Something like file explorer but with my photos across the world.
I insert one (one of a number of pages) into the right side. On its own it’s fine, but inside an iframe, it does allow js. OK with variable but not OK with fumctions. I guess this tweaking some kind of attribute I need to use, but I can’t hack it.
Help
—–
All I have to do after that is visibility:collapse
And add or the places I travelled – mostly China / SE Asiia; and Europe. About 50000 photos, only about 1000 for this album.
it helped us a lot
How can I stop the refresh of iframe on button click or opening a pop up?
Great overview!
Regarding security – please note that it’s considered unsecure to specify the origin domain as a wildcard (*) in your example – postMessage(‘message’, ‘*’).
It’s best to be specific about the domains used for communications to prevent unwanted information discolusre/XSS attacks.
I wrote a library that simplify communication between frames – it’s called iFramily (https://github.com/EkoLabs/iframily).
Basically it has a simpler API than postMessage, which includes Promise-based responses, message queuing, and managing the connection until both frames are ready to talk. It also takes a responsible approach to security…
Would love to hear your thoughts!
Nice Nada,
lazy load really help.
I use it hundreds of times for images, It also works for iframe. LoL
I am planning to embed a third party survey url as a source to my modal window iframe. I want the user to take that survey only once and want to prevent view source or inspect element to show up the src somehow. Or at least want to make it obscure and unreadable. I tried setting it via JavaScript and I obfuscated the js setting this src but still after load of the iframe, src is viewable in plain text which earlier was set to unknown. Any help in securing the survey link?
@Nada Rifki
Is there any way to get the text from click inside iframe.
Explaination: I have an iframe on my page using window.getSelection() i get the selected text, similarly i want to get the selected text from iframe.
Can we do that? if yes how?
Chris Coyier snippet is a really a good one, the white flash is not there any more.
Thanks
Nice. Addressing accessibility concerns that are caused by iframes would be a valuable addition.
I found your article when searching for a solution to deal with my use case. Thank you for what I hope will be the solution!
After adding iframe the website speed shows slow. How can i optimize the iframe?
Hello, i want to open a link in two iframes. how its possible ?
This guide was very helpful for me
I have tried https://github.com/EkoLabs/iframily and https://github.com/SpringRoll/Bellhop. Finally I choose Bellhop over iframily
Can we use iframe to display another site on our domain?
like cineb