Share via


打开AX客户端同时会打开两个IE窗口

最近我碰到了个奇怪的问题:当我打开AX客户端时,它会同时打开两个外部IE窗口来显示用户的角色中心页面,而不使用客户端的内嵌窗口。

经过一些研究,我们发现这是因为AX客户端中(系统管理-)配置-〉网络-〉企业门户-〉网络站点)EP站点的URL都是大写 --  如果您将他们改回小写,问题立刻消失。

如果您想知道为什么会这样请继续阅读。。。

后台的情况是客户端会在数据库里寻找用户的配置文件来确定他们的角色中心URL,然后它通过如下代码(伪代码示例)在客户端中启动一个内嵌浏览器窗口:

EmbededBrowser = shell.explorer;
EmbededBrowser.navigate(urlOfMyPortalPage);

客户端会将在这个阶段取得的URL放入缓存,已备后用。

现在重点是AX客户端同时会挂接到它所创建的浏览器实例中的OnBeforeNavigate2()事件。因此在浏览器显示页面之前,它会回调AX客户端并做一些检测 --  检测之一是将要打开的URL是否和之前传递给它的URL相同,这里大写字母就会产生问题!

浏览器本来会将整个URL小写,但是无论“网络站点”窗体中的URL如何输入,AX客户端都会留有缓存。

此时如果URL不匹配,AX客户端就会决定在新窗口中打开URL并取消内嵌窗口的导航。这个循环会运行数次,这就是为什么会有两个浏览器窗口打开的原因。

正如我在本文开始所述,您仅仅需要将AX中“网络站点”窗体的URL都改成小写即可解决问题。

 

原文地址:

https://blogs.msdn.com/b/emeadaxsupport/archive/2011/06/20/opening-ax-client-opens-two-external-internet-explorer-windows.aspx