页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 8 下一个 »

1.说明

       接到需求,如果判断是产品不支持的,需要定制,首先得判断是在哪里插入什么功能,上一个文档介绍过,系统是以js业务逻辑组件方式按需加载的,那理论上需要在哪里插入对应功能,就需要先找到源功能对应的js组件,下面从几个常用场景说明如何调试定位修改。

        注意:

        1、如果要调试smartbi,最好在url中增加debug=true参数(例如http://192.168.1.10:16000/smartbi/vision/index.jsp?debug=true),否则前后端交互是加密了的。

        2、说明调试定位之前,请选好一个前端调试工具,现在各浏览器实际都自带了调试工具,网上搜索:IE 开发者工具、Chrome 开发者工具、 火狐开发者工具等等,都会有大量的教程,各开发者工具的使用都大同小异,下文的截图都是以chrome 开发者工具为例(打开方式有两种:第一“按F12”,第二:ctrl+shift+i)。

2.样式的调试与定位

       以替换Smartbi文件中修改组合分析报表工具栏中的刷新图标为例子,步骤如下:

       1、使用浏览器开发者工具的审查元素,找到刷新按钮使用的样式为:queryview-toolbar-refresh

       

       2、有时候一个样式控制,譬如颜色,也许是其父元素的样式继承下来的,您需要确定是哪个样式起作用,这时可以在开发者工具右侧styles视图启用、删除或增加样式确认的,确认好了以后再在样式文件中修改。

       

3.图片的定位

       图片查找方法和样式查找方法类似,主要确认使用的是哪个图片,那遇到类似上面图片因为比较小,会被转成base64返回,压根不知道是哪个路径怎么办呢?步骤如下:

       1、这时候,您可以点击上图中样式旁边的  bof_merge.css.jsp:1095(点开后效果见下图),这个意思是queryview-toolbar-refresh样式在bof_merge.css.jsp中的1095行,上个文档说过系统中的css都是通过这个jsp合并一起返回的

       2、但是他会在合并文件前都会注明这段css存于哪个文件(譬如:/** /vision/css/base.css */),搜索css,只要找到1095行之前的css文件标记,就知道存在于哪个css文件

       3、然后取到war包中找到对应css文件,搜索对应样式就知道图片存于哪个目录然后替换。

       

       4、当然还有更简单粗暴的方法,直接在war包中全文搜索对应的样式(仅搜索*.css文件即可)。

3.js组件的调试与定位

3.1调试

       类似想知道点击了某个按钮,会执行什么操作之类,利用chrome开发者工具中事件断点(在网页上发生鼠标交互时会停在断点处的原理)。

       1、设置鼠标监听,此处是设置了鼠标单击事件的监听。

       

       2、进入鼠标事件处理总入口

       在页面单击后会进入到下图代码处,但是此时还不是实际的处理逻辑,下图代码为Smartbi鼠标事件的总入口,此时单步调试进去。

       

       3、进入到dom元素的事件监听处理逻辑,每个dom元素都可以绑定多个鼠标单击事件监听,此处代码会遍历所有的监听是将并执行.

       

       4、调试找到对应的代码后,回看堆栈:

       

3.2定位

       如果要更改现有js组件的内容、逻辑、布局或布局上文字,那就需要找到对应的js组件,找到对应js之后就可以参考如何修改Smartbi JS文件修改,主要有以下几种定位方式

       1、方法一:smartbi系统内提供了一些调试快捷键建议一定看下

       2、方法二:使用charles或开发者工具中的网络功能监控网络请求,根据请求js名称或html布局文件名称猜测,这里介绍使用chrome 开发者工具调试方法。

      上个文档中提过,smartbi是按需加载js组件的,且每个组件基本都会有对应的同名html或.template文件,并且命名都有规范,具有相应功能意义,那实际要看功能对应的js组件是哪个,只要在加载那个功能之前,监控网络请求,基本就能定位到对应的js组件。

       譬如想查找业务主题编辑界面对应的js组件,那就可以打开chrome 开发者工具,切换到网络,在打开一个业务主题之前清空网络内容,然后再打开一个业务主题,从请求信息中就能大概猜出是哪个js(有时因为某个js组件太常用会事先加载网路请求中也许找不到(但布局html文件基本一定是要渲染时才加载的),这时可能需要依赖相应的布局html文件名猜测对应的js组件):

       

       4、方法四:前面三种方式都不好找时,还有个笨办法,就是上面说的,系统很多元素都会命名一个bofid、class,这个bofid或class的名称有时都是有意义的,先使用上面查找css的方法查找到对应的bofid或class,再全文搜索(只需搜索.html或.template文件)

4.更改js组件布局(html)

       有时希望在某个界面添加或删除一个属性,这时可能涉及到修改界面,查找界面对应html和上文的更改js组件之类类似,而且通常更改了布局相应也会修改对应的js,只是布局修改方式通常都是找到对应.html或.template,然后扩展包中同目录下放同名文件即可替换,不过如果改动比较少,这种方式也尽量少用,因为涉及到升级风险(升级了新产品,新产品布局或许已发生变化,结果因为扩展包优先,升后还是用扩展包的),所以能用js代码动态添加dom元素的也可以考虑。

 

 

 

 

  • 无标签