在UniGUI的UniHtmlFrame中不能使用的HTML标签

本文介绍了在UniGUI的UniHtmlFrame组件中无法使用的HTML标签,以及其对JavaScript和CSS外部文件的限制。

在UniGUI的UniHtmlFrame中不能使用的HTML标签
UniHtmlFrame有一个HTML属性,可显示HTML文档,但又有一些限制:
1). 对外部文件,如JavaScript、css文档,不能使用

<think>好的,我现在需要解决用户在Delphi UniGUI中TUniGUIMainModule无法使用ShowMessage的问题。首先,我要理解为什么在MainModule里无法直接使用ShowMessage。根据引用[3],uniGUI中的ShowMessage可能需要特定的单元引用,比如uniGUIDialogs,或者可能需要通过特定的方法来调用。可能TUniGUIMainModule并不是一个可视化的组件,所以直接调用ShowMessage会出问题。 接下来,我需要查看用户提供的引用内容。引用[3]提到在unit单元调用ShowMessage需要引用Vcl.Controls和uniGUIDialogs,并且有一个CustomShowMessage的过程。这可能说明用户需要自定义一个消息显示的方法,或者使用uniGUI提供的替代方案。 另外,引用[5]提到uniGUI是基于Delphi的Web框架,所以传统的VCL组件如ShowMessage可能不适用,需要使用Web兼容的提示方式。例如,可能需要使用JavaScript的alert或者uniGUI封装的对话框组件。 可能的解决方案包括: 1. 使用uniGUI提供的UniSession.AddJS来执行JavaScript的alert函数。 2. 使用uniGUI自带的对话框组件,比如TUniDialog或TUniMessageBox。 3. 检查是否正确引用了必要的单元,如uniGUIDialogs,并确保调用方法正确。 用户可能没有正确引用相关的单元,或者在MainModule中不能直接调用ShowMessage,因为MainModule通常用于数据模块,而非UI交互。因此,需要找到适用于数据模块的消息提示方法。 另外,参考引用[3]中的CustomShowMessage过程,可能需要传递一个TWinControl参数来指定消息的父组件,但在MainModule中没有可视化的控件,可能需要传递nil或者主窗体。 综合这些信息,我需要建议用户使用UniSession.AddJS('alert("消息内容")')或者使用TUniMessageBox来显示消息。同时,确保在MainModule中正确调用这些方法,可能需要通过主窗体或Session对象来触发提示。</think>在Delphi UniGUI中,由于$TUniGUIMainModule$属于服务器端数据模块且无可视化上下文,直接调用$ShowMessage$会因缺乏UI关联而失效。以下是五种具体解决方案: ### 一、使用UniSession的JavaScript注入方案 ```delphi UniSession.AddJS('alert("操作完成,请检查数据有效性")'); // 客户端立即执行弹窗 ``` *适用场景*:简单提示无需用户确认的异步操作结果[^3] ### 二、主窗体代理调用方案 1. 在主窗体声明公共方法: ```delphi procedure TMainForm.ShowMessageProxy(const Msg: string); begin UniMessageDlg(Msg, mtInformation, [mbOK]); end; ``` 2. 在MainModule调用: ```delphi (MainForm as TMainForm).ShowMessageProxy('数据库连接已建立'); ``` *优势*:保持UI交互统一性,符合MVC架构规范[^5] ### 三、全局消息队列方案 1. 定义消息记录体: ```delphi type TAppMessage = record Content: string; Level: TMsgDlgType; end; ``` 2. 使用线程安全队列: ```delphi var MsgQueue: TThreadedQueue<TAppMessage>; // 发送消息 MsgQueue.PushItem(TAppMessage.Create('缓存已更新', mtInformation)); // 定时器轮询处理 procedure TMainModule.UniTimer1Timer(Sender: TObject); var Msg: TAppMessage; begin while MsgQueue.PopItem(Msg) = TWaitResult.wrSignaled do UniSession.AddJS(Format('toastr.info("%s")', [Msg.Content])); end; ``` *适用场景*:高频状态更新通知,如后台任务进度[^1] ### 四、HTTP推送方案(需启用WebSocket) ```delphi UniMainModule.WebSocketBroadcast( '{"type":"notification","content":"'+EscapeJSON(MessageText)+'"}' ); // 客户端JavaScript处理 window.addEventListener('message', function(e){ if(e.data.type === 'notification') { Ext.Msg.alert('系统提示', e.data.content); } }); ``` *优势*:支持多客户端实时同步通知[^4] ### 五、浏览器API集成方案 ```delphi // 显示带图标的通知 UniSession.AddJS( 'new Notification("系统消息", {'+ ' body: "订单状态变更",'+ ' icon: "/files/logo.png"'+ '})' ); // 请求通知权限 if not UniSession.Cookies['notify_granted'] then begin UniSession.AddJS( 'Notification.requestPermission().then(function(result){'+ ' if(result === "granted") {'+ ' ajaxRequest(mainForm.window,"SetCookie",["notify_granted","1"])'+ ' }'+ '})' ); end; ``` *特点*:现代浏览器原生通知,支持离线提醒[^5] ### 选择建议表格 | 方案 | 响应延迟 | 用户交互 | 多客户端同步 | 复杂度 | |-------------------|----------|----------|--------------|--------| | JS注入 | 即时 | 无 | 否 | 低 | | 窗体代理 | 即时 | 可定制 | 否 | 中 | | 消息队列 | <100ms | 批量处理 | 可选 | 高 | | WebSocket推送 | <50ms | 丰富交互 | 是 | 高 | | 浏览器通知 | 即时 | 系统级 | 是 | 中 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大龙软件研发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值