如何在Smarty PHP框架中禁用Adobe Flash插件且不影响系统运行
Smarty框架下禁用Adobe Flash的无故障修改方案
目前系统异常的核心原因是业务代码内置了Flash状态检测逻辑,无Flash环境下检测流程无兼容降级处理,导致后续页面交互、功能初始化失败。以下修改不会影响Smarty框架本身的运行逻辑,也不会破坏其他现有业务功能:
1. 修改Flash检测核心逻辑
直接改写browserFlashEnabled方法,固定返回未启用状态,原有逻辑注释保留方便后续回溯:
protected function browserFlashEnabled() { // 全局禁用Flash检测,直接返回未启用状态 return false; /* 原有逻辑注释归档 if ( isset ( $_COOKIE[ 'flashplayerEnabled' ] ) && $_COOKIE[ 'flashplayerEnabled' ] > 0 ) { if ( !$this->cache->verifyEntry( 'flashPlayerVersion' , 'System' ) ) { $flash = array( 'flashPlayerVersion' => $_COOKIE[ 'flashplayerEnabled' ] ); $this->cache->createEntry( 'System' , $flash ); } } */ }
2. 同步flashEnabled方法返回值
如果代码中$this->flashEnabled()是独立于browserFlashEnabled的单独封装方法,直接修改该方法固定返回false即可;如果是browserFlashEnabled的别名方法,本步骤可跳过。
3. 适配模板渲染逻辑
你现有初始化代码中给Smarty模板传入了flashEnabled变量,前端交互大概率依赖该变量判断是否加载Flash相关功能,可选两种适配方案:
- 方案一(推荐):删除
initializeSystemUserContext方法中的$this->smarty->assign( 'flashEnabled' , $this->flashEnabled() );代码行,同时清理前端模板中所有和{$flashEnabled}相关的判断逻辑,将原有依赖Flash的功能替换为纯HTML/JS实现。 - 方案二(无需改前端):保留赋值代码即可,由于前述修改已经让
flashEnabled()固定返回false,前端会自动走无Flash的降级逻辑,不会触发Flash加载、检测流程,避免卡顿和功能失效。
4. 清理缓存生效
修改完成后依次清空系统业务缓存、Smarty模板缓存、浏览器Cookie和本地缓存,重新访问即可恢复所有功能正常运行。
内容的提问来源于stack exchange,提问作者Precious B
相关产品推荐
相关产品推荐

