This is supposed to be one of a series of CRM Online & Windows Azure posts for which I have been building some samples. While I really wanted to make this the second or third post, someone needed the explanation sooner, so this will be somewhat of a tease to the overall series.
Scenario:
I’ve already configured SSO across Windows Azure & CRM Online. When I try to integrate an Azure hosted page into the CRM UI, I get the following errors:
This content cannot be displayed in a frame
To help protect the security of information you enter into this website, the publisher of this content does not allow it to be displayed in a frame.
This video walks you through why you get the error and how to work around it with a better user experience.
Here’s the code for the two helper pages…
ssoinitiator.htm (CRM Web Resource)
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="refresh" content="5">
<script type="text/javascript"> 1: 2: function getQuerystring(key, default_) { 3: if (default_ == null) default_ = ""; 4: key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 5: var regex = new RegExp("[\\?&]" + key + "=([^&#]*)"); 6: var qs = regex.exec(window.location.href); 7: if (qs == null) 8: return default_; 9: else 10: return qs[1]; 11: } 12: 13: function redirectToIntendedPage() { 14: window.location = decodeURIComponent(getQuerystring("data")); 15: } 16: 17: function bodyOnload() { 18: if (document.cookie.indexOf("AZURE_SSO_COMPLETE=") != -1) { 19: redirectToIntendedPage(); 20: } else { 21: var message = document.getElementById("message"); 22: message.style.visibility = "visible"; 23: 24: if (document.cookie.indexOf("AZURE_SSO_INITIATED=") == -1) { 25: document.cookie = "AZURE_SSO_INITIATED=true"; 26: window.open("https://crmazrfedtest.cloudapp.net/SSOHelper.htm");//replace with your azure hosted version 27: } else { 28: document.cookie = "AZURE_SSO_COMPLETE=true"; 29: redirectToIntendedPage(); 30: } 31: } 32: } 33: </script>
1:
2: function getQuerystring(key, default_) {
3: if (default_ == null) default_ = "";
4: key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
5: var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
6: var qs = regex.exec(window.location.href);
7: if (qs == null)
8: return default_;
9: else
10: return qs[1];
11: }
12:
13: function redirectToIntendedPage() {
14: window.location = decodeURIComponent(getQuerystring("data"));
15: }
16:
17: function bodyOnload() {
18: if (document.cookie.indexOf("AZURE_SSO_COMPLETE=") != -1) {
19: redirectToIntendedPage();
20: } else {
21: var message = document.getElementById("message");
22: message.style.visibility = "visible";
23:
24: if (document.cookie.indexOf("AZURE_SSO_INITIATED=") == -1) {
25: document.cookie = "AZURE_SSO_INITIATED=true";
26: window.open("https://crmazrfedtest.cloudapp.net/SSOHelper.htm");//replace with your azure hosted version
27: } else {
28: document.cookie = "AZURE_SSO_COMPLETE=true";
29: redirectToIntendedPage();
30: }
31: }
32: }
33:
</script>
</head>
<body onload="bodyOnload() ">
<div id="message" style="visibility:hidden">
<h1>Initiating Single Sign On...</h1>
<p>This page will refresh shortly.</p>
</div>
</body>
</html>
SSOHelper.htm (Azure hosted)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<title>SSO Helper</title>
<script type="text/javascript"> 1: 2: function bodyOnload() { 3: window.close(); 4: } 5: </script>
2: function bodyOnload() {
3: window.close();
4: }
5:
<meta http-equiv="expires" content="-1" />
<meta http-equiv="pragma" content="no-cache" />
<body onload="bodyOnload()">
<div>
<h1>Single Sign On Complete</h1>
<p>Please close this window.</p>
@devkeydet