Using CommonShowModalDialog in SharePoint

I’ve not found any post explaining the usage of CommonShowModalDialog in SharePoint, the default popup used by SharePoint across the board. So I thought why can’t I make one.

The method exists in core.js and it is used OOTB by SharePoint for opening popups in places like selecting a web application from a list of web applications, selecting a site collection from a list of site collections etc. (you could see these in Central administration). So here is the method –

function openPopup(){
    commonShowModalDialog("/_layouts/selectitem.aspx", "resizable: no; status:no; scroll: no; help: no; center: yes; dialogwidth:410px; dialogHeight:300px;", RetrieveItemValue);

CommonShowModalDialog has similar parameters as a simple

  1. Target URL
  2. Window features
  3. Callback function

To pass a value from the popup to the parent page use window.returnValue in te popup to save the value before closing the window.

//called from the popup page
function closePoup(){
    window.returnValue = myValue;

Retrieve the value passed from the popup in the callback function mentioned.

//Retreives the value sent from the popup
function RetrieveItemValue(retValue) {

As simple as that.


Retrieving external IP address and geolocation of an IP address using JavaScript

Yesterday I was working on a client application which required to read the public address of the client and their geo-location. So after some search I wrote the following html page which gets the current IP as well as retrieves the public location of an IP purely using JavaScript and some external APIs.

    <title>Locate an IP</title>
    <script type="text/javascript" src="yqlgeo.js"></script>
    <script type="text/javascript">

        var ipaddress;

        //get location of an IP
        function getIPLocation() {
            document.getElementById('divDetails').innerHTML = '<br />Loading..';
            try {
                var start = new Date();
                var ctrl = document.getElementById('txtIP');
                var ipadd = ctrl.value;
                yqlgeo.get(ipadd, function (o) {
                    var details = '<br /><h3><b>Location Details</b></h3>';
                    details += 'Country Code : <b>' + + '</b><br />';
                    details += 'Country Name : <b>' + + '</b><br />';
                    details += 'Country Language : <b>' + + '</b><br />';
                    details += 'Latitude : <b>' + + '</b><br />';
                    details += 'Longitude : <b>' + + '</b><br />';
                    details += 'Place Name : <b>' + + '</b><br />';
                    document.getElementById('divDetails').innerHTML = details;
                var end = new Date();
                var diff = dateDifference(start, end);
                //document.getElementById('divtime').innerHTML = 'Time Elapsed : ' + diff.seconds;
            catch (e) {
                document.getElementById('divDetails').innerHTML = e.Message;

        //get current IP
        function getCurrentIP() {
            var ctrl = document.getElementById('txtCurrentIP');
            if (ctrl) {
                ctrl.value = ipaddress;
                alert('Unable to retrieve IP');

        function getip(json) {
            if (json.ip)
                ipaddress = json.ip;
                alert('Unable to retrieve the IP address');

    <script type="text/javascript" src=""></script>
    <form id="frm" action="javascript:getIPLocation()">
        Get your IP Address
    <input type="text" id="txtCurrentIP" />
    <input type="button" onclick="getCurrentIP()" value="Get IP" />
        Type the IP Address
    <input type="text" id="txtIP" />
    <input type="button" onclick="getIPLocation()" value="Locate" />
    <br />
    <div id="divDetails">
    <br />
    <div id="divtime">

The sample makes use of the YQL Geo Library written by Chris Heilmann which is available here to retrieve the geo-location of an IP. To retrieve the client’s external IP I’ve made use of the API provided by Thanks to the SO post here.