MapGuide 浏览器可接受参数分析

简介:


 
摘要:
这篇文章我们主要讲述如何通过阅读分析MapGuide的源代码对MapGuide浏览器所接受参数的分析。
如果你也正在困惑于MapGuide Ajax Viewer或者Fusion Viewer究竟可以使用那些参数,那么请你继续阅读。
 

我们首先把Ajax Viewer和Fusion Viewer可用的参数列表列出来:

Ajax Viewer中可用的参数为:

WEBLAYOUT
LOCALE
SESSION
USERNAME
PASSWORD

Fusion Viewer可用的参数为:

Session
ApplicationDefinition

 

当然了,首先我们还是先简单介绍一下我们在基于MapGuide开发WebGIS应用程序时是怎样调用MapGuide 浏览器的。

在使用Ajax Viewer时:

<%@ Page Language="C#" %>
<%
@ Import Namespace = "OSGeo.MapGuide"%>
<%
UtilityClass utility = new UtilityClass();
String webLayout = "Library://Exercise/Layouts/SheboyganAsp_4_Solution.WebLayout";
//string webLayout = "Library://Samples/Sheboygan/Layouts/SheboyganAspTiled.WebLayout";

String sessionId = "";
try
{
utility.InitializeWebTier(Request);
MgUserInformation userInfo = new MgUserInformation("Anonymous", "");
MgSite site= new MgSite();

site.Open(userInfo);
sessionId = site.CreateSession();
}
catch(MgException ex)
{
Response.Write(ex.GetMessage());
Response.Write(ex.GetDetails());
}
finally
{
}

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<
html xmlns="http://www.w3.org/1999/xhtml" >
<
head>
<
title>Exercise 4</title>
</
head>
<
frameset rows="100,*" border="0" framespacing="0">
<
frame src = "title.htm" />
<
frame src="/mapguide2010/mapviewernet/ajaxviewer.aspx?SESSION=<%= sessionId %>&WEBLAYOUT=<%= webLayout %>" name="ViewerFrame" />
</
frameset>
</
html>

 

这里我们着重看下面<frame>部分,注意到我们使用到了SESSION 和 WEBLAYOUT两个参数。那么在Ajax View中,除了这两个常用参数外,还有没有别的参数可用呢?

关于Ajax Viewer所接受的参数目前还没有文档说明哪些可用怎么用,不过MapGuide的一个特点就是开源,我们可用通过他的源代码来窥探它内部的秘密。打开C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\mapviewernet\mainframe.aspx 转达594行,在函数GetParameters中掐头去尾我们看下面的代码:

    webLayoutDefinition = parameters["WEBLAYOUT"];
String localeParam = parameters["LOCALE"];
if (localeParam != null && localeParam.Length > 0)
{
locale = localeParam;
}
else
{
locale = GetDefaultLocale();
}
sessionId = parameters[
"SESSION"];
if (sessionId != null && sessionId.Length > 0)
{
sessionId = parameters[
"SESSION"];
orgSessionId = sessionId;
}
else
{
username = parameters[
"USERNAME"];
if (null != username && username.Length > 0)
{
password = parameters[
"PASSWORD"];
if (null == password)
{
password =
"";
}
return;
}


分析上面的代码,我们可以知道 Ajax Viewer中可收的参数除了我们常用的Session和Weblayout外,还有几个,他们是:
LOCALE
USERNAME
PASSWORD

那么同样的道理,那Fusion中的情况呢? 我们还是先看看Fusion Viewer的一般用法。新建一个普通的aspx页面,在Page_Load中写如下代码:

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string webLayout = "Library://Samples/Sheboygan/Layouts/TestFlex.ApplicationDefinition";
string defaultUser = "Administrator";
string defaultPassword = "admin";
try
{
MapGuideApi.MgInitializeWebTier(@"C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\webconfig.ini");

MgUserInformation userInfo = new MgUserInformation(defaultUser, defaultPassword);
MgSite site = new MgSite();
site.Open(userInfo);
string sessionId = site.CreateSession();
Response.Write(
"<script>alert('" + sessionId + "');</script>");

Response.Redirect(
"http://localhost/mapguide2010/fusion/templates/mapguide/slate/index.html?ApplicationDefinition=" + webLayout + "&Session=" + sessionId);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
}

 

这里注意到我们的Fusion Viewer可接受的参数为ApplicationDefinition和Session, 那么除此以外还有没有别的呢?如果没有为什么是这两个而不是其他的呢?我们还是要在代码里看看一下就明白了。

打开C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\fusion\lib\fusion.js,第227行左右

initialize : function(options) {
options = options || {};
var sessionIdParam = this.getQueryParam('Session');
this.sessionId = sessionIdParam || (options.sessionId || null);

if (options.applicationDefinitionURL) {
this.applicationDefinitionURL = options.applicationDefinitionURL;
}
else {
var queryAppDef = this.getQueryParam('ApplicationDefinition'); if (queryAppDef) {
this.applicationDefinitionURL = queryAppDef.split('+').join(' ');
this.appDefJson = null; //wipe out any preloaded AppDef in a single file build
} else {
this.applicationDefinitionURL = 'ApplicationDefinition.xml';
}
}

 

注意看上面的黑体代码,可以得知,我们所需要的两个参数正是在这里被接受的。

 

好了,MapGuide OpenSource 代码很多,还有很多很多更好玩的东西需要你去发现,以前来研究吧。

作者: 峻祁连
邮箱:junqilian@163.com 
出处: http://junqilian.cnblogs.com 
转载请保留此信息。






本文转自峻祁连. Moving to Cloud/Mobile博客园博客,原文链接:http://www.cnblogs.com/junqilian/archive/2009/10/28/1591182.html ,如需转载请自行联系原作者
相关文章
|
1月前
|
前端开发
调试前端时,在浏览器上修改参数并重新调用接口
有时候我们的页面点击过了,但是接口出问题,想修改参数再调用一次,一般是用apiPost工具把接口复制,再加上token和参数,但是这样非常的效率比较低。
41 0
|
3月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
156 0
|
17天前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
17天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
4月前
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
1月前
|
Web App开发 JavaScript 前端开发
分析网站架构:浏览器插件
分析网站架构:浏览器插件
44 1
|
8月前
|
Web App开发 Python
Python Chrome handless(无界面浏览器,add_argument 支持哪些参数,替代 PhantomJS)
Python Chrome handless(无界面浏览器,add_argument 支持哪些参数,替代 PhantomJS)
95 0
|
9月前
|
Web App开发 JavaScript 前端开发
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
数据挖掘和分析是当今互联网时代的重要技能,它可以帮助我们从海量的信息中提取有价值的知识,为我们的决策和行动提供支持。但是,有些网站的内容是通过Javascript动态生成的,这就给数据挖掘和分析带来了一定的难度。如何才能有效地获取和处理这些Javascript内容呢?本文将介绍一种简单而强大的方法,就是使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析。
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
|
9月前
|
Web App开发 JavaScript 前端开发
浏览器页面卡住定位分析
有童鞋在xxx系统页面反馈,遇到在弹出框后整个页面卡住无法使用的情况,属于必现问题。因此需要跟踪定位问题。
354 0
浏览器页面卡住定位分析

热门文章

最新文章