wiki:CodeSamples/JavaScript/InvokeCommandOnStartup

Version 1 (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 name 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

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.