本文详细介绍了金蝶云星空产品中二开嵌套网页的步骤,包括在BOSIDE中设置Panel面板、构建插件以指定控件类型、设置网页网址属性等。同时,阐述了Silverlight嵌套静态网页的原理及体验问题,并推荐了在Cloud环境下嵌套静态网页的最佳做法,即使用弹窗样式展示。此外,还提及了GUI客户端嵌套网页的IE8内核兼容性及WPF指定嵌套内核为IE11的方法,并给出了服务端插件直接打开浏览器地址的关联方法案例。
针对金蝶云星空产品二开嵌套网页的二开实例详解:
1、在BOSIDE中的窗体中拖进一个Panel面板(其属性设置充满),最好是Panel套Panel方式,最外面一个Panel设置所在窗体的位置大小,里面一个panel充满也即实际KDWebBrowse控件。
2、必须要有个构建插件,构建插件写法(在CreateControl事件里面):
if (e.ControlAppearance.Key.EqualsIgnoreCase("FPanelWebBrowse"))
{
e.Control["xtype"] = "kdwebbrowser";
}
3、设置其网页网址属性:(也可以直接在上面构建插件里面写固定网址:e.control["source"]="http://…………")
this.View.GetControl("FPanelWebBrowse").SetCustomPropertyValue("IsBrowserVisible", false);
this.View.GetControl("FPanelWebBrowse").SetCustomPropertyValue("Source", "http://…………");
this.View.GetControl("FPanelWebBrowse").SetCustomPropertyValue("IsSetBrowseVisible", true);
//如果限制了宽高,需要里面嵌套的网页自动出现滚动条,需要属性放开
this.View.GetControl("FPanelWebBrowse").SetCustomPropertyValue("AutoScroll", true);
应用说明(二开必看):
1、Silvelight嵌套静态网页原理:
Silverlight里面嵌套静态网页实际是在可视的区域嵌套了html语言的iframe标签元素,而Silverlight也是html语言的一个object元素,指的是浏览器的一个对象,因此iframe,silverlight并没有直接的联系,也就是说嵌套的静态网页不是Silverlight的一个子对象,隐藏Silverlight里面这个窗体,窗体中的静态网页始终都是显示的,所以我们随着鼠标的操作对静态网页做了实时的显示隐藏控制,体验上不佳,其iframe的相对位置是每做一个操作就会重新计算,在前端里面写了比较复杂的这个逻辑,当在过多情况下,始终都是难控制。(如二开相应嵌套网页的功能,由于体验影响可忽略在silverlight支持,WPF客户端和Html5客户端均不受影响,总部将不再支持改善该体验问题)
2、cloud嵌套静态网页最理想建议做法(强烈建议):
嵌套静态网页最好是一个独立的弹窗样式展示,也就是单据里放个按钮或者链接啥的,然后点击直接一个弹窗式的展示,这个弹窗里面只有一个静态网页,而且这个弹窗设置成浮态属性。(鼠标不能点击其下层的任何操作)。针对这一实现前端已封装出一个独立方法:
插件样例写法:
//弹窗式的打开静态网页地址
JSONObject webobj = new JSONObject();
webobj["source"] = "http://www.baidu.com";
webobj["height"] = 545;//打开窗体默认高度
webobj["width"] = 810;//打开窗体默认宽度
webobj["isweb"] = false;//为true时,在silverlight下面是以弹出浏览器窗口方式打开,注意浏览器阻拦弹窗的设置问题,为false时silverlight默认集成窗体式打开。GUI客户端不受此属性影响
webobj["title"] = "百度";
this.View.AddAction("ShowKDWebbrowseForm", webobj);
this.View.SendDynamicFormAction(this.View);
3、GUI客户端说明:
客户端嵌套网页默认是用IE8内核打开这个静态网页,所以二开自己的嵌套网页需要考虑兼容IE8下的各种脚本问题
扩展:WPF的嵌套网页时,如何指定嵌套内核为IE11?
https://vip.kingdee.com/article/187971870887619072
4、关联方法案例:
1)、服务端插件直接打开某个浏览器地址
this.View.AddAction("ShowWebURL", "http://.......");//浏览器的阻止弹窗设置允许
this.View.SendDynamicFormAction(this.View);
推荐阅读