终于解决了昨天碰到了
菜单被applet挡住的问题,所采用的技术是Iframe Shim,参考文章是
Using IFrame Shim to (partly) cover a Java applet
以下算是不断碰壁的简单总结吧,希望能对碰到类似问题的同仁有所帮助。
先说说基本Iframe Shim原理吧,我觉得是通过JavaScript动态创建iframe元素,同时设置相关的属性(比如z-index,postion等),来满足其浮动于applet或者其他插件之上。
我是用Ext做菜单的,所以采用的技术和方法都是和Ext相关,不过基本原理应该适合其他JavaScript框架的。
为此我用创建了id=inventory的Toolbar.Button组件,在其上又增加了几个Menu,现在增加代码如下:
javascript 代码
- Ext.onReady(function(){
- var tb = Ext.getCmp('inventory');
- tb.on('menushow',function(toolbar,menu) {
- var menuEl = menu.getEl();
- createShim({
- top:menuEl.getY(),
- left:menuEl.getX(),
- width:menuEl.getWidth(),
- height:menuEl.getHeight()
- });
- });
- tb.on('menuhide',function(toolbar,menu) {
- var shimmer = document.getElementById('shimmer')
- document.body.removeChild(shimmer);
- });
- });
- function createShim(coordinate) {
- var shimmer = document.createElement('iframe');
- shimmer.id='shimmer';
- shimmer.style.position='absolute';
- shimmer.style.top=coordinate.top;
- shimmer.style.left=coordinate.left;
- shimmer.style.width=coordinate.width;
- shimmer.style.height=coordinate.height;
- shimmer.style.zIndex='999';
- shimmer.setAttribute('frameborder','0');
- shimmer.setAttribute('src','javascript:false;');
- document.body.appendChild(shimmer);
- }
首先在menushow事件中,动态创建shimmer,设置其position,left,top,width,height,zIndex等属性,要确保菜单的zIndex大于iframe的,还要确保iframe里边没有内容,即src应该为空。
其次在menuhide事件中移出动态创建的shimmer.
以上代码可以执行,非常感谢Ext为我们提供了便利的事件监听机制。
分享到:
相关推荐
在计算机编程领域,"shim"通常指的是一个小型软件组件,用于解决兼容性问题或填补功能空缺,使得旧版软件能在新环境中正常运行。在硬件领域,"shim"也可以是指物理垫片,用于调整设备的间隙或对齐。这里结合描述,...
- **参考作者工具**:除了官方推荐的编辑器外,还可能有其他第三方工具支持 SHIM 文件的创建和编辑,这些工具通常具有更丰富的功能集。 - **SHIM 2.0 的变更**:相比于早期版本,SHIM 2.0 引入了多项改进,包括对...
"es5-shim-master.zip"是一个解决浏览器兼容问题的工具,它包含的"es5-shim"库使得开发者可以在不担心浏览器兼容性的情况下,放心地使用ES5的特性。通过理解并合理使用这个库,可以提升代码的可移植性和跨浏览器的...
`es5-shim.js`是JavaScript开发者的宝贵工具,它通过提供对ECMAScript 5特性的polyfill,使得开发者可以编写更现代、更简洁的代码,而无需担心旧版浏览器的兼容性问题。虽然现代浏览器已经普遍支持ES5,但在维护旧...
shim-signed
用于PXE引导UEFI的文件shim.efi
总的来说,`es6-shim`作为一款工具,帮助开发者在旧版浏览器中享受到部分ES6的便利,但它并不是解决所有兼容问题的万能药。在实际项目中,根据目标环境选择合适的策略,比如使用Babel进行转译,或者结合其他垫片库,...
"前端项目-es7-shim.zip" 是一个压缩包,它包含了一个名为 "es7-shim" 的项目,这个项目的目标是为那些不支持ES7特性的老旧JavaScript引擎提供兼容性支持。下面我们将深入探讨ES7中的重要特性以及如何通过shim来实现...
example-jquery-shim, 通过shim配置使用jQuery和jQuery插件的示例项目 在 shim 配置中使用jQuery和 require.js的示例。本示例显示一种用 require.js. jQuery本身寄存器加载jQuery和jQuery插件的方法,可以以轻松加载...
尽管`es5-shim`能够显著改善旧浏览器的兼容性,但它并不能解决所有问题。有些ES5特性,如异步编程、Promise或新的数据类型,无法通过垫片完全模拟。因此,在编写代码时,仍需谨慎对待目标浏览器的兼容性,合理使用...
`jellyfin_mpv_shim`是Python社区的一个重要工具,它将Jellyfin媒体服务器与强大的mpv播放器结合,为用户提供了一种灵活、高效的方式来播放和管理个人媒体库。通过PyPI,开发者和用户都能轻松获取并使用这个库,...
type SimpleAsset struct {args := stub.GetStringArgs()return shim.Error("Incorrec
kettle5.0.1 使用cdh5.0.0 shim包
java编写chaincode时所需依赖的shim-client包,包含ChaincodeBase类等(这个是有效的,请放心下载)
"dirname-shim" 就是一个这样的开源库,它专注于解决在不同环境下的目录名获取问题。"dirname-shim" 的设计目标是提供一个统一的API,使得开发者在处理模块路径时能够更加便捷,无论是在CommonJS、AMD还是UMD环境中...
修复这些错误是解决问题的关键步骤。 7. **更新或替换浏览器**:尽管我们正在努力修复IE,但考虑到微软已停止支持大部分版本的IE,推荐用户升级到最新版的Microsoft Edge,或者使用其他主流浏览器如Chrome、Firefox...
可解决HP B320i (FLUSH、CMPLT、BKGND)这三个进程cpu使用率一直很高的问题。 描述如下: 1、/var/log/message显示 Dec 17 13:59:26 localhost kernel: PAL Shim AllocRequest returning NULL Dec 17 13:59:26 ...
xlsx导出的js2