Introduction
	This article demonstrates how to  communicate 
	 from main a page to an iframe and vice versa when they are loaded with 
	contents from different domains using IIS ARR and URL Rewrite. 
	 
	A browser allows cross-domain communication 
	between the main page and its iframe only when the main page and iframe 
	 contents are loaded from the same domain with the same protocol and port.
	
		
		See Figure 1 below. The main page content 
		is loaded from http://www.abc.com and the iframe content is loaded from 
		http://www.abc.com. Both domains are the same with the same protocol 
		(HTTP) and port (80).
		 
 
	
		For security reasons, the browser's same 
		origin policy restricts accessing iframe content from the main page and 
		vice versa when the main page and iframe contents are loaded from 
		different domains.
	The browser restricts communication 
	between main page and iframe in the following scenarios:
 
 
	
		
			| 
			
			MainPage URL | 
			
			IFrameURL | 
		
			| 
			
			
			http://www.abc.com | 
			
			
			http://www.xyz.com | 
		
			| 
			
			
			http://www.abc.com | 
			
			
			http://www.abc.com:8080 | 
		
			| 
			
			
			http://www.abc.com | 
			
			
			http://subdomain.abc.com | 
		
			| 
			
			
			http://www.abc.com | 
			
			
			https://www.abc.com | 
	
 
	
	 
	The browser same origin policy is ignored in 
	the following cases:
	
		- When document.domain of the main page 
		and the iframe are set with the same domain name
- When HTTP headers contain Access-Control-Allow-Origin 
		(cross origin resource)
- By the postMessage method
All the above cases require access to edit 
	the main page and the iframe page. Consider a scenario, when you want to 
	load iframe content from an external domain of which you don't have any 
	access. You cannot use either any one of the above cases. 
 
	
	You may ask why I must access embedded iframe 
	content loaded from an external domain. It may be for several reasons, for 
	example you want to search for/read some specific data or collect some data 
	from the user and post it to an external domain page and read the content. 
	Then next question is how do I access embedded iframe content loaded from an 
	external domain. One way is with a reverse proxy.
	 
	A reverse proxy is a type of proxy that will 
	fetch content from external servers on behalf of your server. It is not the 
	same as a forward proxy. A forward proxy will fetch content from an external 
	server on behalf of client.
	 
	Forward Proxy
	 
	The client sends a request to an external 
	domain, let's say http://www.xyz.com and the proxy forwards this request to 
	the xyz.com server and sends the response back  to the client.
	 
	The client browser shows theURL "xyz.com". It 
	means the proxy is just forwarding a request.
	 
	Cookies, if any are stored, are stored on the 
	client machine with the xyz.com domain.
	
	Reverse Proxy
	 
	All the client requests are handled by 
	reverse proxy. For example the reverse proxy server "myserver.com" is 
	configured with some rule, let's say whenever a request comes as "xyz.myserver.com" subdomain, 
	the server must fetch the content from "www.xyz.com" 
	and should send it back to the client. 
	 
	Still the client thinks he is connecting to 
	xyz.myserver.com but not xyz.com. He had no idea that the actual content 
	response is received from xyz.com. The client browser still shows "xyz.myserver.com."  
	 
	
		Cookies, if any are stored, are stored on 
		the client machine with the myserver.com domain.
 
	
	Application Request Routing(ARR) and URL 
	Rewrite
	 
	
		Many reverse proxies are available in the 
		market, Application Request Routing (ARR) is one of the them and is from 
		Microsoft. It can be integrated with IIS. The ARR and URL Rewrite 
		combination acts as a reverse proxy. 
		 
 
	Here, I'll not explain how ARR and URL 
	rewrite works. Tons of tutorials are available on the web. Please visit ARR and URL 
	Rewrite for more information.
	  
	You can configure the ARR reverse proxy to 
	fetch content from external domains based on the incoming requests with URL 
	rewrite rules. 
	 
	You can do main page and iframe cross domain 
	communication.
	 
	Step 1:  Install ARR and URL Rewrite
	 
	Install ARR and URL Rewrite from IIS web 
	platform installer. After installing, check ARR and URL Rewrite icons by 
	clicking on the IIS server root node.
	 
	
	Step 2: Enable ARR proxy with default settings
	 
	Ensure Enable Proxy and Reverse rewrite 
	checkboxes are checked, leave the other default settings as they are.
	 
	Step 3: Configure Sites and URL Rewrite 
	rule for external domain 
	
	You can configure main page and iframe 
	domains in one of two ways; they are:
	
		- As a URL path
		For example the main page URL can be http://www.myserver.com/main and 
		the iframe URL can be http://www.myserver.com/xyz 
			http://www.myserver.com/main mapped 
			to your IIS server folder main. 
			            
			http://www.myserver.com/xyz  
			mapped to xyz folder and configured  with URL Rewrite (reverse proxy 
			rule) to fetch content from xyz.com
 
 
- 
		
			As a sub domain 
			
 For example the main page URL can be http://www.myserver.com and 
			the iframe URL can be http://xyz.myserver.com
 
			
 http://www.myserver.com mapped 
			to your IIS server folder.
 
 
			http://xyz.myserver.com mapped 
			to server folder xyz and  and configured with URL Rewrite (reverse 
			proxy rule) to fetch content from xyz.com. 
In this example I'll go for sub domain. 
	For testing on the local machine, add entries www.myserver.com and xyz.myserver.com in 
	your windows hosts file.
 
 
	Configure your main website and iframe 
	external website as in the following:
	
 
	Main website
	 
	External domain 
	 
	URL Rewrite 
	 
	Choose the reverse proxy rule and add sites 
	as in the following:
	 
	2. Inject:
	document.domain='myserver.com'
	for every response sent by myserver.com using 
	the URL rewrite outbound rule. 
	 
	Create an URL Rewrite blank outbound rule as 
	in the following:
	 
	 
	
		Accessing iframe content from the main 
		page and vice versa
		 
	
		You can access iframe content from the 
		main page using an iframe element contentWindow and main page content 
		from an iframe using window.parent.
	
		 
	
		Examples
	
		 
	
		From main page:
		 
	
		var iframeContent = 
		document.getElementById('iframeelement').contentWindow.document.body.innerHTML 
		 // iframe HTML content, check cross browser
		 
	
		From iframe:
		
		var mainPageContent = window.parent.top.document.body.;
	
		 
	
		Summary
		 
	
		In this article, I discussed how to 
		override the browser's same origin policy when communicating with an 
		iframe pointing to an external domain.