[编程笔记] 奇怪的bug - 公共提示组件不生效

news/2024/11/4 23:35:55/文章来源:https://www.cnblogs.com/sunshine-wy/p/18526963

    项目中有这么一个提示框:

    对应的代码是:top.msg.ok(123)

    很简单的一个功能,初看的时候就猜到是用的某个组件,其他地方要用一般照抄,改下文案即可,这种弹出肯定是公共组件了。

    然鹅,很神奇的是我新做的页面,复制以后没效果!由于是最近刚接触的项目,多少有点不熟悉,排查起来花了些时间,也挺有意思,记录一下。

    对于一个不熟的项目, 不熟的组件,怎么去排查呢?

    首先我们看代码,top.msg.ok(123),123就是内容了,你改成'这是一段文本',它就可以提示文字信息。重点看前面:

    1、top 代表页面,一般是当前页,如果你页面有很多弹窗,涉及其他页,那么这个下拉框还会出现其他页面

    这里要说一下,以前我觉得控制台能输出所有我看见的页面元素,后来我发现像那种多个页面嵌套的,你要在top那个下拉里选一下,这个时候控制台才能获取到你想的元素。

    2、msg 代表这个页面上的对象,只要你找对了页面,那么在这个页面加载的脚本里,肯定可以找到msg这个对象。

    3、ok 代表方法,除了ok,常见的还有error等,其实就是打印日志信息常见的info、warning、error这些。

    那么清楚这些之后,再去找就很简单了。

    不过找代码是存在一定技巧的,简单的、明确的你可以直接搜关键字马上就知道在哪里定义的,但是对于这种msg、ok,比较常见的字符,其实不一定能快速搜出来,项目越大,检索结果越多,越难过滤出我们想要的,那么如何快速找到那个我想要的js函数呢?

    我们可以在用到这个函数的地方设置断点,手动打断点或者通过debugger关键设置断点都行。

    设置好断点以后,运行到这个方法时,我们把鼠标悬浮上去,找到"[[FunctionLocation]]:"的地方,你就可以看到是哪里定义的这个函数了,原来在Index页面啊。

    一般事情到这里就结束了,找到页面了,这个页面是否公共页面,如果不是,就再提炼一下写个通用的,或者方法弄到那边去。

    很明显,我这个是公用的,只是这个Index模板不适用我新做的页面,因为新做的页面用的另一个后台,涉及另一个Index,我们姑且称之为IndexB。

    然后去找IndexB页面,发现方法有。调试了一下,咦,居然不走这个方法。

    怎么排查呢?首先,我们来看浏览器是否加载了资源(js、css、images):

     我先看的是正常的页面,Index,这里的js,css,images,都正常。然后我对比了一下我做的页面资源加载情况:

    images没加载出来,怪不得弹出看不到效果!那么images为什么没加载出来呢?我们猜也可以猜到,css引用了images,而images没有加载,说明什么?说明css没加载,或者没执行!

    很明显,我们看到css加载了,那就只能是没执行了。那么又是为什么css请求images的代码没执行呢?这就要看看这个插件的js代码怎么写的了!

    左侧的资源点击一下,右侧就可以看到具体内容了。

    这个插件的代码扫一眼就知道,两步,先初始化,然后可以调用jnotifyAddMessage方法实现弹窗提示。项目里的代码确实有调用jnotifyAddMessage(这里不展示项目代码,请忽略)。

    看懂以后,稍微调试一下两个页面就知道,Index能弹窗,是因为jnotifyAddMessage方法的if能走进去,而IndexB页面的走不进去,走不进去的原因就在于这个hasClass了,有这个class才会继续执行代码,而这个class,是需要先执行初始化才会有的,那么结论就出来了:IndexB没有对弹出组件进行初始化。

    结案:最后发现是IndexB页面代码有bug,导致没有执行初始化的代码。

    

    很简答的一个功能,但是其实也涉及一些分析问题和在浏览器进行调试的技巧,这种组件没效果的问题,最重要的是明白组件的原理,看懂组件的代码,看懂以后,结合调试技巧,就能得出答案了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826865.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux内存管理学习总结

一、内存寻址 1.1 逻辑地址、线性地址、物理地址的概念 1.2 逻辑地址转换线性地址步骤 1.3 线性地址到物理地址的转换 二、内存管理 2.1 引导内存分配器阶段 2.2 内存管理子系统 2.3 32位架构的地址空间划分 2.4 64位架构的地址空间划分 2.5 内核态的内存管理 2.6 用户态内存管…

https页面加载http资源的解决方法

https页面加载http资源的解决方法@目录1.报错如图2.项目背景3.网上的解决方案4.我的最终解决方案 1.报错如图2.项目背景我们的项目采用的全是https请求,而使用第三方文件管理器go-fastdfs,该文件管理器返回的所有下载文件的请求全是http开头的,比如http://10.110.38.253:110…

Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载

Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载@目录一、业务背景二、实现思路二、准备工作1.准备data模板.xlsx2.引入poi相关依赖,用于操作excel3.针对WorkBook+ZIP压缩输入/输出流,相关方法知识点要有所了解三、完整的项目代码四、可能遇到的问题错误场景…

macOS 解锁隐藏文件

不知道为什么,我用 VS Code 编译的 LaTeX 文档是隐藏的,导致我复制到其他地方都看不见这个文档。首先可以按下 Command + Shift + . 组合键显示隐藏文件。接下来可以用下面的命令取消隐藏的文件: chflags nohidden <file>如果你想重新隐藏的话,使用下面的命令: chfl…

Spring原理Boot

Spring原理 SpringBoot 1 Boot 1.1 Boot 骨架项目 如果是 linux 环境,用以下命令即可获取 spring boot 的骨架 pom.xml curl -G https://start.spring.io/pom.xml -d dependencies=web,mysql,mybatis -o pom.xml也可以使用 Postman 等工具实现 若想获取更多用法,请参考 curl …

0xGame 2024 [Week 2] 报告哈基米

0xGame 2024 [Week 2] 报告哈基米 新知识:Tupper(塔珀自指公式);Arnold Cat(猫映射) 下载文件是一个png图片,010打开查看 发现是倒着的pk转一下保存为zip文件,打开后是一个txt文件有两个地方有提示,一个是十六进制里面的Maybe You Need To Kown Arnold Cat?还有一个是…

告别 PPT 配图难题!Napkin.ai 轻松打造生动演示文档(文末免费送书)

还在为 PPT 配图发愁?Napkin.ai 来救场!它是强大的文本自动配图工具,能自动摘要文本、生成并自定义配图,下载方式多样。文中详细介绍其使用方法,包括注册、创建 Napkin、选择和设置配图等。此外,还有免费送书活动,关注、留言点赞就有机会获得《OpenAI API 接口应用实战》…

Origin pro 2024下载与安装

1、安装包 OriginPro 是由 OriginLab 公司开发的专业制图和数据分析软件,大部分科学研究的统计、作图、函数拟合等要求都可以满足,尤其适合曲线、曲面的图。它提供了上百种二维和三维绘图模板,而且允许用户自己定制模板。OriginPro 中的数据分析功能包括统计,信号处理,曲线…

20222323 2024-2025-1 《网络与系统攻防技术》实验四实验报告

1.实验内容 一、恶意代码文件类型标识、脱壳与字符串提取 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具; (2)使用…

如何计算并联谐振电路中电感和电容的电流

(附:可以验证一下电容的容抗计算,假设在1kHz(其他频率电容值会变)时计算470uF的容抗为2x3.14x10^3 x470x10^-6约等于0.339欧)

C# windos服务的安装与卸载

注:需要使用管理员权限打开 使用命令窗口安装服务使用命令窗口卸载服务 使用 PowerShell安装服务 与命令窗口区别在于需要加上 ./ 卸载也是如此