Just been looking at DNN6 & I am blown away that in 2011 Dotnetnuke has decided to use iframes for its popups. The use of iframes in 2011 should be limited (if used at all).
The idea of having an ajax/kquery popup is so that it loads fast. Where ever possible your code should be placed inline & displayed on demand. If not using inline then partial rending is recommended - using iframes is slow & kinda kills the point of using a jquery popup.
I have just looked at quite a few other cms's & none of them try to fake ajax using iframes. IMHO DNN has just gone back 10 years :(
To give you an example if the login dialog should just display some inline code for the login popup. This keeps it nice & fast as the code in minimal & already preloaded.
EXAMPLE OF A NORMAL JQUERY POPUP USING INLINE CONTENT (FAST):
<div class="dnnForm dnnLoginService dnnClear">
<div class="dnnFormItem">
<label for="dnn_ctr_Login_Login_DNN_txtUsername" id="dnn_ctr_Login_Login_DNN_plUsername" class="dnnFormLabel">Username:</label>
<input name="dnn$ctr$Login$Login_DNN$txtUsername" type="text" id="dnn_ctr_Login_Login_DNN_txtUsername" AUTOCOMPLETE="off" />
</div>
<div class="dnnFormItem">
<label for="dnn_ctr_Login_Login_DNN_txtPassword" id="dnn_ctr_Login_Login_DNN_plPassword" class="dnnFormLabel">Password:</label>
<input name="dnn$ctr$Login$Login_DNN$txtPassword" type="password" id="dnn_ctr_Login_Login_DNN_txtPassword" AUTOCOMPLETE="off" />
</div>
<p><a id="dnn_ctr_Login_Login_DNN_cmdLogin" title="Login" class="dnnPrimaryAction" href=" WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr$Login$Login_DNN$cmdLogin", "", true, "", "", false, true))">Login</a></p>
</div>
</div>
</div>
<div class="dnnLoginRememberMe">
<input id="dnn_ctr_Login_chkCookie" type="checkbox" name="dnn$ctr$Login$chkCookie" />
<label for="dnn_ctr_Login_chkCookie">Remember Login</label>
</div>
<div><span id="dnn_ctr_Login_lblLogin"></span></div>
<div class="dnnLoginActions">
<ul class="dnnActions dnnClear">
<li id="dnn_ctr_Login_liRegister"><a id="dnn_ctr_Login_registerLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/register.aspx?returnurl=%2fdefault.aspx&popUp=true',/*showReturn*/true,600,950,true,'')">Register</a></li>
<li id="dnn_ctr_Login_liPassword"><a id="dnn_ctr_Login_passwordLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/GettingStarted/tabid/55/ctl/SendPassword/Default.aspx?returnurl=%2fdefault.aspx&popUp=true',/*showReturn*/true,300,650,true,'')">Retrieve Password</a></li>
</ul>
</div>
</div>
</div>
DNN6 load a full dnn page without a skin (lots of unneeded code & unneeded database calls - this is why all the popups are so slow).
EXAMPLE OF DNN6 IFRAMED POPUP LOGIN FORM (SLOW):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head id="Head">
<!--**********************************************************************************-->
<!-- DotNetNuke - http://www.dotnetnuke.com -->
<!-- Copyright (c) 2002-2011 -->
<!-- by DotNetNuke Corporation -->
<!--**********************************************************************************-->
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta content="text/javascript" http-equiv="Content-Script-Type" />
<meta content="text/css" http-equiv="Content-Style-Type" />
<meta id="MetaKeywords" name="KEYWORDS" content=",DotNetNuke,DNN" />
<meta id="MetaCopyright" name="COPYRIGHT" content="Copyright 2011 by DotNetNuke Corporation" />
<meta id="MetaGenerator" name="GENERATOR" content="DotNetNuke " />
<meta id="MetaAuthor" name="AUTHOR" content="My Website" />
<meta name="RESOURCE-TYPE" content="DOCUMENT" />
<meta name="DISTRIBUTION" content="GLOBAL" />
<meta id="MetaRobots" name="ROBOTS" content="INDEX, FOLLOW" />
<meta name="REVISIT-AFTER" content="1 DAYS" />
<meta name="RATING" content="GENERAL" />
<meta http-equiv="PAGE-ENTER" content="RevealTrans(Duration=0,Transition=1)" />
<style id="StylePlaceholder" type="text/css"></style>
<link href="/DependencyHandler.axd/5dd403e98df088ec31bdd47e19c6e735.51.css" type="text/css" rel="stylesheet"/>
<script src="/DependencyHandler.axd/54cf24e54f5b3128aae50cf7ddc4ef1e.51.js" type="text/javascript"></script>
<link href="/Telerik.Web.UI.WebResource.axd?compress=1&_TSM_CombinedScripts_=%3b%3bTelerik.Web.UI%2c+Version%3d2011.2.915.20%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3af3497db7-eb6b-42ac-8ad3-643dea674073%3a45085116%3a27c5704c" type="text/css" rel="stylesheet" />
<title>User Log In</title>
</head>
<body id="Body">
<form name="Form" method="post" action="/login.aspx?ReturnUrl=%2fdefault.aspx&popUp=true" id="Form" enctype="multipart/form-data">
<div>
<input type="hidden" name="StylesheetManager_TSSM" id="StylesheetManager_TSSM" value="" />
<input type="hidden" name="ScriptManager_TSM" id="ScriptManager_TSM" value="" />
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="wjgTrGyUicJWL6Nsjo+JPqlQl7RYAxKpAKaVdfI3szKhH8w/uy+JZQ70XiGURgsOiH7vQM4RhC2Kusm3sEUrryND2ZfJ8/XMIj7f8mBQ4AAeC3Io7LUUJI5t0SKM9Ypqkf5sVJGBKn3bF9pS3AxSXu78flK/NR8Wki2KtJkj6HX5qaAUALQelBQRbm9wufG0zKGbDlUQhvBxQqwnSone6Gmr0VIGsd3Xt9r4d3F4CwwU93dUCi6cfsRaWSF4sUrU9ZJKMtjAUxvjaP21A0dUBdAlO1s+3A0i/iA8ZOG+JZIa3WJZrggqEgDF15b/AEc7xT1Q8LJfYN6pL66JwMj4fxfhQ/OgPIaKbcHPJcUxlM3h0S/UYXiNRnP1XkuAbVMYPJsDNxP2G9QajW5QMTuD9iIy+ttjqcHufP6gu6sgroAzFtBI8EdTZ90eKUfLHzJzgzFEi5kPVd4hWIZRw1BdHj0hvLaFa0oKpnxqVxNzBZUpcy3JPEEgwLvVFcmH4WBXGijh4xbH0l666VJhCIE3o2hq5+2GdwMGAZGoeM9jD7FUxOiLmTWCF/aAEo5M0zkbbf97rnrdxCQiHizDvT70rPkqrbGbuWJrPQW++Si87CFG5TxiaR4GmlZpfNKxELG1MCw6a9crcr917OP77/jwgGBN2Go527bEuoyofeWmWoLWvakwCTLnrFm+6tGK6i7u7JGWHJqWRcTLhM5PMj0sv0usHIQutE9LhFfEkXMQkb0tFXJ5Vsefh0GD3YNZWzrNQzCLIP2i8WEws9rjWYpxSYaYBuhEj41hSInguZ6i+BlVmTY3ZoGzp0mcGPZY6t7aojYOUXi981nRB0WFIU2wgV9BL2GKM9o5U+hj8BB251a05UWXByaETKvwX4nhnH/8tspFlZyTYIU9khx2T+0VhZmlm4vW2GsO2DufSupJJ8ALbMaohdo+/TzNkrUgYoACIBIhscJZDSaei/eEfba2b2NdseDo107JQp0cFsjYXx/va+2IQiutmz14V4IjWa9cDs2iF5/AqQ6eh6wy/iJv3c/DAc7ysCAAFDdbEgPxiI0WmxSRwZSkb6GJwfTMhXDk8iEnuuMEQJ1eXDU5omWedPEQhk2lVUxbxlwa+qT2wWYiq/AO2gzoKA9YqvQehuyCasOzfTTYh4Kfm67qaQ42v6JkD6H8E+fgK7rYtW9YfcgEDRHXN9d8QOJqe7PG89IufJWGjUIeKgOzWJGsJ8CNOO7avSxvKlRBRxyOZzLRN394o55raiHZcLjbm+Oxvyw66316+zImqpeJ/R0afjQxB9F1OHNrBQ5eckn8c70Mp0U35+KBV8FR662Noq5vxQZn+dqJtFY55/KNeua+pKGojcyHa94PmcL1M3Mx0wqI0hSZOHwA9H1Ym9F6YRaGmjmfPNOppc/dXG1Uu2MjXMvKTMWSAZJ7b1MaXtiZSgPaqcmBeGAQlFv+nOQXG5mpw5X4sHegZHBvNw1yhPXodU30rSuJka6RE2bly8swWIaP0fMAeqlfmS07oj4ZWs2ex5UEGYu8qHAlPdlI7gGkTd4a+UdY2HlNTftfMNrscpZ58Bof8HdmknCzxaJT9AdtXGFdXFcba9PpYF7bibzLSlAvZjAw21wE3/lw72zMrm1KkpHMek+J" />
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form'];
if (!theForm) {
theForm = document.Form;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/WebResource.axd?d=jYMyVmuoNRBKQQ_59jKyr94kUqO-ZB4JgOJGzpmsrna1MsmsKkLyffzcIW7Rr9YnyqV8m850eL8LLGJJ0&t=634209138757546466" type="text/javascript"></script>
<script src="/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ScriptManager_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d3.5.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3afab31106-1bd6-4491-9a14-59e0fc4a7081%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2011.2.915.20%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3af3497db7-eb6b-42ac-8ad3-643dea674073%3a16e4e7cd%3af7645509%3aed16cbdc" type="text/javascript"></script>
<script src="/js/dnn.js" type="text/javascript"></script>
<div>
<input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="yI2BAheAzuE33jSO0H8GhQXgiQsdPJX1uWhQ3IcBhUuhf/b4WxTCwIuNj4z+XZIG3CrvH6D9HVIcq+759V2htlFAjzUXMiiqyTUJ5L4urNPZMPK5xZSMnTwvqt6odBzzTAv++Q==" />
</div>
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ScriptManager', document.getElementById('Form'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tdnn$ctr$dnn$ctr$Login_UPPanel'], [], [], 90);
//]]>
</script>
<script src="/DependencyHandler.axd/37464bc4741d43829756293e6fddd0a7.51.js" type="text/javascript"></script>
<div id="dnn_ContentPane">
<div class="DnnModule DnnModule- DnnModule--1">
<div id="dnn_ctr_ContentPane">
<div id="dnn_ctr_ModuleContent" class="DNNModuleContent ModC">
<div id="dnn_ctr_Login_Prog" class="RadAjax RadAjax_Default" style="display:none;">
<div class="raDiv"> </div>
<div class="raColor raTransp"> </div>
</div>
<div id="dnn_ctr_dnn_ctr_Login_UPPanel">
<div id="dnn_ctr_Login_UP">
<!-- 2011.2.915.20 -->
<div class="dnnForm dnnLogin dnnClear">
<div id="dnn_ctr_Login_pnlLogin">
<div class="loginContent">
<div id="dnn_ctr_Login_pnlLoginContainer" class="LoginPanel">
<div id="dnn_ctr_Login_DNN" onkeydown="return __dnn_KeyDown('13', ' __doPostBack(%27dnn$ctr$Login$Login_DNN$cmdLogin%27,%27%27)', event);">
<div class="dnnForm dnnLoginService dnnClear">
<div class="dnnFormItem">
<label for="dnn_ctr_Login_Login_DNN_txtUsername" id="dnn_ctr_Login_Login_DNN_plUsername" class="dnnFormLabel">Username:</label>
<input name="dnn$ctr$Login$Login_DNN$txtUsername" type="text" id="dnn_ctr_Login_Login_DNN_txtUsername" AUTOCOMPLETE="off" />
</div>
<div class="dnnFormItem">
<label for="dnn_ctr_Login_Login_DNN_txtPassword" id="dnn_ctr_Login_Login_DNN_plPassword" class="dnnFormLabel">Password:</label>
<input name="dnn$ctr$Login$Login_DNN$txtPassword" type="password" id="dnn_ctr_Login_Login_DNN_txtPassword" AUTOCOMPLETE="off" />
</div>
<p><a id="dnn_ctr_Login_Login_DNN_cmdLogin" title="Login" class="dnnPrimaryAction" href=" WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr$Login$Login_DNN$cmdLogin", "", true, "", "", false, true))">Login</a></p>
</div>
</div>
</div>
<div class="dnnLoginRememberMe">
<input id="dnn_ctr_Login_chkCookie" type="checkbox" name="dnn$ctr$Login$chkCookie" />
<label for="dnn_ctr_Login_chkCookie">Remember Login</label>
</div>
<div><span id="dnn_ctr_Login_lblLogin"></span></div>
<div class="dnnLoginActions">
<ul class="dnnActions dnnClear">
<li id="dnn_ctr_Login_liRegister"><a id="dnn_ctr_Login_registerLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/register.aspx?returnurl=%2fdefault.aspx&popUp=true',/*showReturn*/true,600,950,true,'')">Register</a></li>
<li id="dnn_ctr_Login_liPassword"><a id="dnn_ctr_Login_passwordLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/GettingStarted/tabid/55/ctl/SendPassword/Default.aspx?returnurl=%2fdefault.aspx&popUp=true',/*showReturn*/true,300,650,true,'')">Retrieve Password</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="c_footer"> </div>
</div>
</div>
<input name="ScrollTop" type="hidden" id="ScrollTop" />
<input name="__dnnVariable" type="hidden" id="__dnnVariable" value="`{`__scdoff`:`1`,`__dnn_pageload`:`__dnn_SetInitialFocus(\u0027dnn_ctr_Login_Login_DNN_txtUsername\u0027);`}" />
<script type="text/javascript" src="/Resources/Shared/scripts/initWidgets.js" ></script>
<script type="text/javascript">
//<![CDATA[
;(function() {
function loadHandler() {
var hf = $get('StylesheetManager_TSSM');
if (!hf._RSSM_init) { hf._RSSM_init = true; hf.value = ''; }
hf.value += ';Telerik.Web.UI, Version=2011.2.915.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4:en-US:f3497db7-eb6b-42ac-8ad3-643dea674073:45085116:27c5704c';
Sys.Application.remove_load(loadHandler);
};
Sys.Application.add_load(loadHandler);
})();Sys.Application.initialize();
Sys.Application.add_init(function() {
$create(Telerik.Web.UI.RadAjaxLoadingPanel, {"initialDelayTime":0,"isSticky":false,"minDisplayTime":0,"skin":"Default","transparency":0,"uniqueID":"dnn$ctr$Login_Prog","zIndex":90000}, null, null, $get("dnn_ctr_Login_Prog"));
});
Sys.Application.add_init(function() {
$create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"dnn_ctr_Login_Prog","styles":[],"uniqueID":"dnn$ctr$Login_UP"}, null, null, $get("dnn_ctr_Login_UP"));
});
//]]>
</script>
</form>
<script type="text/javascript">
//<![CDATA[
//This code is to force a refresh of browser cache
//in case an old version of dnn.js is loaded
//It should be removed as soon as .js versioning is added
jQuery(document).ready(function () {
if (navigator.userAgent.indexOf(" Chrome/") == -1) {
if ((typeof dnnJscriptVersion === 'undefined' || dnnJscriptVersion !== "6.0.0") && typeof dnn !== 'undefined') {
window.location.reload(true);
}
}
});
//]]>
</script>
</body>
DNN Corp really need to start thinking before they implement poorly thought out solutions. A few more bad decisions off the top of my head include localization (no user testing was done & it is way to complicated & just doesn't work), including close source products like Telerik (I don't think I need to say anything else here), the new DNN6 control panel is not user friendly (again no user testing has been done - the original one is much better or you should of bought Oliver Hines to include in DNN).
We are going to be making a decision very shortly to decide if we should keep supporting DNN with our Professional subscriptions or if we are going to move to another product that implements the latest technology in a more thought out user friendly manner.
|