Solved

Custom Alert box with javascript

Posted on 2011-02-16
2
1,074 Views
Last Modified: 2012-05-11
Hi,
 
I’m using a Custom Alert code, from this website, and I need a bit of help.
Custom Alert
 
I have a simple script that allow redirect users to different page if browser is not the correct to work property with my site.
 
The code works perfect, but I can’t stay in the same page after load the Alert Box.
I need to this custom Alert stay in same page, and after clic on button “Ok” the user should be redirect depending of the browsers. But this not happening, the alertbox is showed and later hide.
 
Any clue?
 
This is the code to redirect users to different pages depending of browser.
var bname = navigator.appName;
var bcode = navigator.appCodeName;
var bplat = navigator.platform;
var bagen = navigator.userAgent;
 
if (bname == "Microsoft Internet Explorer")
   {
alert("Estas usando " + bname + "\nPor favor usa el navegador Mozilla Firefox" + "\nExiste problemas de incompatibilidad" + "\nGracias por tu comprensión");
   window.location="page1.html";
   }
else
   {
if (bagen== "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13")
   {
alert("Estas usando Google Chrome"+ "\nPor favor usa el navegador Mozilla Firefox" + "\nExiste problemas de incompatibilidad" + "\nGracias por tu comprensión");
   window.location="page2.html";
 
   }
else
   {
if (bcode == "Mozilla")
   {
   }
else
{
alert("Estas usando un navegador no apropiado para este sistema" + bname + "\nPor favor usa el navegador Mozilla Firefox" + "\nExiste problemas de incompatibilidad" + "\nGracias por tu comprensión");
   window.location="page3.html";
   }
   }
}

Open in new window

 

And this is the code from the author of Alert Box, this use some css styles to design the alert box, But in this case this is unnecessary. I just paste the java code.

// constants to define the title of the alert and button text.
var ALERT_TITLE = "Oops!";
var ALERT_BUTTON_TEXT = "Ok";

// over-ride the alert method only if this a newer browser.
// Older browser will see standard alerts
if(document.getElementById) {
	window.alert = function(txt) {
		createCustomAlert(txt);
	}
}

function createCustomAlert(txt) {
	// shortcut reference to the document object
	d = document;

	// if the modalContainer object already exists in the DOM, bail out.
	if(d.getElementById("modalContainer")) return;

	// create the modalContainer div as a child of the BODY element
	mObj = d.getElementsByTagName("body")[0].appendChild(d.createElement("div"));
	mObj.id = "modalContainer";
	 // make sure its as tall as it needs to be to overlay all the content on the page
	mObj.style.height = document.documentElement.scrollHeight + "px";

	// create the DIV that will be the alert 
	alertObj = mObj.appendChild(d.createElement("div"));
	alertObj.id = "alertBox";
	// MSIE doesnt treat position:fixed correctly, so this compensates for positioning the alert
	if(d.all && !window.opera) alertObj.style.top = document.documentElement.scrollTop + "px";
	// center the alert box
	alertObj.style.left = (d.documentElement.scrollWidth - alertObj.offsetWidth)/2 + "px";

	// create an H1 element as the title bar
	h1 = alertObj.appendChild(d.createElement("h1"));
	h1.appendChild(d.createTextNode(ALERT_TITLE));

	// create a paragraph element to contain the txt argument
	msg = alertObj.appendChild(d.createElement("p"));
	msg.innerHTML = txt;
	
	// create an anchor element to use as the confirmation button.
	btn = alertObj.appendChild(d.createElement("a"));
	btn.id = "closeBtn";
	btn.appendChild(d.createTextNode(ALERT_BUTTON_TEXT));
	btn.href = "#";
	// set up the onclick event to remove the alert when the anchor is clicked
	btn.onclick = function() { removeCustomAlert();return false; }

	
}

// removes the custom alert from the DOM
function removeCustomAlert() {
	document.getElementsByTagName("body")[0].removeChild(document.getElementById("modalContainer"));
}

Open in new window

Any help will be welcome.
Thanks.
0
Comment
Question by:plus_ec
2 Comments
 
LVL 82

Accepted Solution

by:
hielo earned 500 total points
ID: 34913356
try altering the code to allow a callback:
var ALERT_TITLE = "Oops!";
var ALERT_BUTTON_TEXT = "Ok";

// over-ride the alert method only if this a newer browser.
// Older browser will see standard alerts
if(document.getElementById) {
	window.alert = function(txt, callback) {
		if( 'function'!=typeof(callback))
			callback=function(){};
		createCustomAlert(txt,callback);
	}
}

function createCustomAlert(txt,callback) {
	// shortcut reference to the document object
	d = document;

	// if the modalContainer object already exists in the DOM, bail out.
	if(d.getElementById("modalContainer")) return;

	// create the modalContainer div as a child of the BODY element
	mObj = d.getElementsByTagName("body")[0].appendChild(d.createElement("div"));
	mObj.id = "modalContainer";
	 // make sure its as tall as it needs to be to overlay all the content on the page
	mObj.style.height = document.documentElement.scrollHeight + "px";

	// create the DIV that will be the alert 
	alertObj = mObj.appendChild(d.createElement("div"));
	alertObj.id = "alertBox";
	// MSIE doesnt treat position:fixed correctly, so this compensates for positioning the alert
	if(d.all && !window.opera) alertObj.style.top = document.documentElement.scrollTop + "px";
	// center the alert box
	alertObj.style.left = (d.documentElement.scrollWidth - alertObj.offsetWidth)/2 + "px";

	// create an H1 element as the title bar
	h1 = alertObj.appendChild(d.createElement("h1"));
	h1.appendChild(d.createTextNode(ALERT_TITLE));

	// create a paragraph element to contain the txt argument
	msg = alertObj.appendChild(d.createElement("p"));
	msg.innerHTML = txt;
	
	// create an anchor element to use as the confirmation button.
	btn = alertObj.appendChild(d.createElement("a"));
	btn.id = "closeBtn";
	btn.appendChild(d.createTextNode(ALERT_BUTTON_TEXT));
	btn.href = "#";
	// set up the onclick event to remove the alert when the anchor is clicked
	btn.onclick = function() { removeCustomAlert(); callback(); return false; }

	
}

// removes the custom alert from the DOM
function removeCustomAlert() {
	document.getElementsByTagName("body")[0].removeChild(document.getElementById("modalContainer"));
}

Open in new window


Then INSTEAD of
alert("...");
window.location="...";

use:
alert("...", function(){ location.href="..."; } );/* notice that the second argument to YOUR custom alert not takes a function reference. */
0
 
LVL 1

Author Comment

by:plus_ec
ID: 34913446
This works perfect, Thanks you so much,,
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
Boost your ability to deliver ambitious and competitive web apps by choosing the right JavaScript framework to best suit your project’s needs.
In this tutorial viewers will learn how to code links for mobile sites that, once clicked, send a call or text to a specified number. For a telephone link (once clicked, calls a number), begin with a normal "<a href=" link tag. For the href, specify…
In this tutorial viewers will learn how to embed Flash content in a webpage using HTML5. Ensure your DOCTYPE declaration is set to HTML5: "<!DOCTYPE html>": Use the <object> tag to embed Flash content.: To specify that the object is Flash content, d…

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now