wiki:CodeSamples/JavaScript/InvokeCommandOnStartup

Version 2 (modified by jng, 14 years ago) ( diff )

--

This page is one of the MapGuide Community CodeSamples. Visit the CodeSamples page to view more!

Overview

This html page can automatically invoke a named viewer command on viewer startup based on the value of a Cmd query string property. This uses the InitialTask property of the Web Layout.

For example setting this initial task pane url:

http://path/to/autostart.html?Cmd=Measure

Will launch the Measure command on viewer startup.

As you can see from the code below, we need to employ initialization checks just like in the event hooking example, to make sure we can start using the Viewer API when the frames have been fully initialized.

autostart.html

<html>
	<head>
		<title>Auto-start command in task pane</title>
		<script type="text/javascript">
			
			var viewerFrame = parent.parent;
			
			function GetQueryStringValue(key)
			{
				key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
				var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
				var qs = regex.exec(window.location.href);
				if(qs == null)
					return "";
				else
					return qs[1];
			}
			
			function GetCommandIndex(name)
			{
				var cmds = viewerFrame.GetCommands();
				for(var i = 0; i < cmds.length; i++)
				{
					//This command array is not sequential, there may be holes
					//so we have to test element existence before testing name equality
					if (cmds[i] && cmds[i].name == name)
						return i;
				}
				return -1;
			}
			
			function OnMapInitialized()
			{
				var cmdName = GetQueryStringValue("Cmd");
				var i = GetCommandIndex(cmdName);
				if (i < 0)
					alert("Command not found: " + cmdName);
				else
					viewerFrame.ExecuteCommand(i);
			}
			
			window.onload = function() {
				//Timer variable
				var timer; 

				// This is our "watch" function. What we are doing here is 
				// repeatedly checking the mapInit value of the Map Frame. When
				// mapInit is true, then the map has been loaded.
				var watch = function() {
					
					// What we are doing here is attempting to access the mapInit
					// variable of the Map frame. The reason the code is in a try-catch
					// is because chances are that this code access the DOM
					// of the map frame before its DOM has been initialized.
					try {
						var mapFrame = viewerFrame.mapFrame;
						if(mapFrame.mapInit) {
			 
							// Remove the timer so this watch function stops executing
							clearInterval(timer);
							 
							// Call our custom handler
							OnMapInitialized();
						}
					}
					catch(e) {
					}
				};
				
				// Start the "watching" process. We basically invoke the watch function 
				// every 200ms until the map has been loaded.
				timer = setInterval(watch, 200);

			};
			
		</script>
	</head>
	<body>
	</body>
</html>
Note: See TracWiki for help on using the wiki.