Html页面与flash的加载
如下图,flash是html页面的一个插件节点。
js与flash进行交互,首先要处理好html页面和swf的加载问题。
Swf调用外部js方法,要确保js方法已存在,该条件一般都满足,因为swf加载比页面js慢。
Js访问swf的接口时,要确保swf已经加载完成,该条件则需要做特殊的处理。
如何做?
可以想到的是,只有flash插件本身才知道自己是否加载完成,所以,需要flash插件在加载完成后要主动的通知外部html页面:“我加载完啦!”,外部html页面收到这个通知后再进行后续的操作。
更复杂的情况是,页面有2次加载数据的场合:要同时保证,页面、flash、数据都加载完成后,在进行后续操作。
ExternalInterface类
ExternalInterface类是实现flash外部调用的关键类,其中:
ExternalInterface.available:判断是否允许进行外部调用。
ExternalInterface.addCallback:注册外部访问flash的方法(js 2 flash)。
ExternalInterface.call:flash内部调用外部方法(flash 2 js)。
关于该类的更多信息请查看帮助文档。
向MyReport插件增加js访问的接口
MyReportApp.swf在加载完成后会主动调用页面的js方法onMyReportInitialized;关闭时主动调用js方法onMyReportClosed;打印时主动调用js方法onMyReportPrinted。
注册了一个loadReport方法可以让页面js进行调用。
以下是MyReportApp的flex代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:myreport="myreport.*"
minWidth="800" minHeight="600" backgroundColor="0xffffff" creationComplete="Init()"
fontFamily="Simsun" layout="horizontal" paddingBottom="0" paddingLeft="0"
paddingRight="0" paddingTop="0">
<mx:Style source="Index.css"/>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.CloseEvent;
import myreport.MyReportEvent;
import myreport.ReportEngine;
import myreport.ReportViewer;
import myreport.export.ExportEvent;
private function Init():void
{
//注册关闭事件
_Report.addEventListener(CloseEvent.CLOSE, OnClose);
//注册导出事件
_Report.addEventListener(ExportEvent.EXPORT, OnExport);
//注册打印事件
ReportEngine.AddEventListener(myreport.MyReportEvent.PRINT, OnPrint);
AddExtInterface();
OnMyReportInitialized();
}
private function OnClose(event:CloseEvent):void
{
//处理关闭事件
OnMyReportClosed();
}
private function OnPrint(event:MyReportEvent):void
{
//处理打印事件
OnMyReportPrinted();
}
private function OnExport(event:ExportEvent):void
{
var file:FileReference;
if(event.FileType == ExportEvent.FILE_TYPE_PDF)
{
file = new FileReference();
//保存到本地,该方法要Flash player 10以上
file.save(event.Bytes, "Export1.pdf");
}
else if(event.FileType == ExportEvent.FILE_TYPE_XLS)
{
file = new FileReference();
//保存到本地,该方法要Flash player 10以上
file.save(event.Bytes, "Export1.xls");
}
}
private function AddExtInterface():void
{
if(ExternalInterface.available)
{
ExternalInterface.addCallback("loadReport", LoadReport);
}
}
//==============定义外部访问接口====================
/**
* 加载完成时调用,通知外部初始化加载已完成
* (主动调用)
*/
private function OnMyReportInitialized():Object
{
if(!ExternalInterface.available)
return 0;
return ExternalInterface.call("onMyReportInitialized");
}
/**
* 关闭时调用,通知外部点击了关闭按钮
* (主动调用)
*/
private function OnMyReportClosed():Object
{
if(!ExternalInterface.available)
return 0;
return ExternalInterface.call("onMyReportClosed");
}
/**
* 打印时调用,通知外部执行了打印功能
* (主动调用)
*/
private function OnMyReportPrinted():Object
{
if(!ExternalInterface.available)
return 0;
return ExternalInterface.call("onMyReportPrinted");
}
/**
* 加载报表和数据
* (被动调用,必须在onMyReportInitialized执行后调用)
*/
private function LoadReport(url:String, params:Object, table:Array):void
{
_Report.Load(url, new ArrayCollection(table), params);
}
]]>
</mx:Script>
<myreport:ReportViewer id="_Report" width="100%" height="100%">
</myreport:ReportViewer>
</mx:Application>
在html页面中与MyReportApp.swf交互
MyReportEmbedDemo.html的代码,引入了swfobject.js向页面动态添加flash插件MyReportApp.swf。用jquery控制页面的加载,页面加载后调用onPageLoad方法。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>js与flash交互:嵌入MyReport插件示例</title>
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript" src="myreport.js"></script>
<script src="jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
var swfVersionStr = "11.1.0";
var xiSwfUrlStr = "playerProductInstall.swf";
var flashvars = {};
var params = {};
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "sameDomain";
params.allowScriptAccess = "always";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "MyReportApp";
attributes.name = "MyReportApp";
attributes.align = "middle";
swfobject.embedSWF("MyReportApp.swf", "flashContent", "955px", "600px", swfVersionStr, xiSwfUrlStr, flashvars, params, attributes);
</script>
<script type="text/javascript">
$(document).ready(function () {
onPageLoad();//该方法在myreport.js实现
});
</script>
</head>
<body>
<p style=" text-align:center">该示例演示在页面嵌入MyReport插件,使用js与flash插件进行交互</p>
<div id="flashContent">
<p>
To view this page ensure that Adobe Flash Player version
11.1.0 or greater is installed.
</p>
<script type="text/javascript">
var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");
document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"
+ pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );
</script>
</div>
</body>
</html>
myreport.js的代码,关键位置加粗显示,页面加载后调用loadReport1调用加载报表方法,传入静态测试数据。
var myReportAPI; //定义MyReport接口对象
var myReportInit = false; //定义MyReport初始化变量
//页面加载完成时调用
function onPageLoad(){
myReportAPI = document.getElementById("MyReportApp");
loadReport1();
}
function onMyReportInitialized(){
myReportInit = true;
//以下是自定义代码
alert("MyReport初始化。");
loadReport1();
}
function onMyReportClosed() {
//以下是自定义代码
alert("MyReport关闭。");
}
function onMyReportPrinted() {
//以下是自定义代码
//alert("MyReport打印。");
}
function myReportLoad(url, params, table) {
if (!myReportAPI || !myReportInit)
return;
myReportAPI.loadReport(url, params, table);
}
//自定义加载方法1
function loadReport1() {
if (!myReportInit)// 要先判断插件是否初始化
return;
var url = "xml/ReportStyle1.xml"; //报表路径
//报表参数数据,这里为了测试方便使用了静态的数据,实际使用时应该向服务端动态请求数据。
var params = {};
params["单据编号"] = "KA06417033944";
params["单据日期"] = new Date();
params["主标题"] = "销售单";
params["公司名称"] = "XXXX贸易公司";
params["经手人"] = "某某某";
params["公司地址"] = "广州市天河区天河路xx号 xx大厦 xx楼";
params["公司电话"] = "66866888";
params["公司"] = { "地址": "广州市天河区天河路xx号 xx大厦 xx楼", "电话": "66866888" };
//报表表格数据,这里为了测试方便使用了静态的数据,实际使用时应该向服务端动态请求数据。
var table = new Array();
for (var i = 0; i < 25; i++){
table.push({ID: i, 名称: "商品信息XXX 规格XXX 型号XXX", 数量: i+1, 金额: (i+1)*10, 日期: new Date()});
}
myReportLoad(url, params, table);
}
运行效果图
如何获取MyReport
相关文章
相关推荐
js与flash进行交互,首先要处理好html页面和swf的加载问题。Swf调用外部js方法,要确保js方法已存在,该条件一般都满足,因为swf加载比页面js慢。Js访问swf的接口时,要确保swf已经加载完成,该条件则需要做特殊的...
1. 客户端脚本与服务器端代码:在创建ASP.NET应用时,为了实现非回发事件(non-post-back events)的即时响应,通常需要使用客户端脚本,例如JavaScript或VBScript。这样可以避免整个页面刷新,提高用户体验。在题目...
内容概要:本文详细介绍了COMSOL与MATLAB联合仿真的具体实现方法及其应用。首先讲解了如何通过LiveLink进行基本操作,如加载模型、设置参数并运行仿真。接着探讨了利用MATLAB的强大功能扩展COMSOL的功能,包括参数扫描、优化算法、批量处理等高级操作。随后,文章深入讨论了基于MATLAB App Designer设计友好的GUI界面的方法,使用户能够更加便捷地控制和展示仿真结果。此外,文中还分享了许多实用的调试技巧,如实时监控参数、异常处理以及内存管理等,确保仿真过程顺利进行。最后,强调了联合仿真在提高科研工作效率方面的巨大潜力。 适合人群:对数值模拟和科学计算感兴趣的科研工作者、工程师和技术爱好者,尤其是那些希望将COMSOL与MATLAB结合起来以增强仿真能力的人群。 使用场景及目标:适用于需要高效执行复杂仿真任务的研究项目,旨在帮助用户掌握COMSOL与MATLAB联合使用的最佳实践,从而显著减少仿真时间并获得更精确的结果。 其他说明:文章不仅提供了详细的代码示例,还分享了很多实践经验,有助于读者快速上手并解决实际问题。同时提醒读者关注不同版本间的兼容性和性能优化问题。
等速万向节周期寿命试验台垂直运动模块及PLC控制设计 毕业设计说明书.doc
钢筋混凝土肋梁楼盖设计课程设计说明书.doc
特征 基于mpv,在macOS上提供最佳解码能力 设计时考虑了macOS(10.15+)的现代版本 视频和音乐所需的所有功能:字幕、播放列表、章节……以及更多! Force Touch、画中画和高级Touch Bar支持 可定制的用户界面,包括多种配色方案和屏幕控制器(OSC)布局定位 专为音频文件设计的独立音乐模式 视频缩略图 在线字幕搜索与智能本地字幕匹配 无限播放历史记录 方便的交互式视频/音频过滤器设置 完全可定制的键盘、鼠标、触控板和手势控制 面向高级用户的mpv配置文件和脚本系统 提供命令行工具和浏览器扩展
内容概要:本文详细介绍了如何利用Bagging集成学习方法进行时间序列预测,并提供了完整的Matlab代码实现。首先解释了Bagging的基本原理,强调了在时间序列预测中保持序列连续性和防止信息泄露的重要性。然后展示了如何通过滑动窗口法生成样本矩阵,并使用ARIMA与XGBoost的混合模型作为基模型,实现了Bagging集成。文中还讨论了预测阶段的聚合策略,如指数衰减加权,以及并行加速技巧。此外,作者分享了一些实践经验,如避免使用复杂的深度学习模型作为基模型,以及如何处理异常值和特征工程的具体方法。 适合人群:具有一定编程基础和技术背景的研究人员、数据科学家和工程师,特别是对时间序列预测感兴趣的读者。 使用场景及目标:适用于需要提高时间序列预测精度的实际应用场景,如电力负荷预测、销售预测等。目标是通过集成学习方法减少预测误差,提高模型稳定性。 其他说明:文中提供的代码可以直接运行,同时附带了许多实用技巧和注意事项,帮助读者更好地理解和应用Bagging集成模型。
苯 正丁醇化工原理课程设计说明书.pdf
4.0吨商用车膜片弹簧离合器设计说明书.doc
常村煤矿22采区2203综采放顶煤工作面开采设计说明书.docx
内容概要:本文介绍了一种创新的方法,利用多目标黏菌优化算法(MOSMA)来优化支持向量机(SVM)的参数C和gamma,从而提高回归预测的效果。首先详细解释了MOSMA的工作原理,包括黏菌权重更新、快速非支配排序以及自适应参数调整等关键技术点。接着展示了具体的Python代码实现,涵盖数据预处理、适应度函数定义、参数更新规则等方面。实验结果显示,在风电功率预测等多个应用场景中,相较于传统的网格搜索方法,MOSMA能够更快更有效地找到最优参数组合,显著提升了预测性能。 适合人群:从事机器学习研究或应用开发的技术人员,尤其是关注SVM参数优化及回归预测领域的从业者。 使用场景及目标:适用于需要进行高效参数寻优的回归预测任务,如风电功率预测、设备负载预测等。主要目标是通过改进SVM参数配置,获得更高的预测精度和更好的泛化能力。 其他说明:文中提供了完整的代码示例和详细的实施步骤指导,帮助读者快速理解和应用这一先进的优化技术。此外,还讨论了一些常见的注意事项和技术细节,如数据标准化、参数范围设定、并行化改造等。
项目管理知识体系.ppt
内容概要:本文详细介绍了如何利用Python进行盾构机姿态计算和隧道中线设计计算的自动化。首先,针对盾构机刀盘中心坐标的计算,提出了基于前后参考点距离的方法,并加入了异常值检测机制。其次,对于隧道中线的设计,采用三次样条曲线拟合,解决了控制点间距过大导致的“甩尾”现象。此外,文章还讨论了高程计算中的竖曲线处理方法,以及如何通过Pandas和Matplotlib实现自动报表生成和偏差分析。最后,强调了将工程经验转化为算法的重要性,旨在提高工作效率并减少人为错误。 适用人群:从事地铁隧道建设的技术人员、测量员、程序员及相关领域的研究人员。 使用场景及目标:适用于需要频繁进行盾构机姿态和隧道中线计算的工程项目,目标是提升计算效率和准确性,减轻工作人员负担,确保施工进度不受影响。 其他说明:文中提供了多个具体的Python代码片段,涵盖了从数据读取、处理到可视化的完整流程,为读者提供了一个完整的解决方案。同时,作者分享了许多实际应用中的经验和教训,帮助读者更好地理解和应用这些算法。
计算机二级Word精选二十套(标红)
项目管理体系样本.doc
蓝桥杯
SmartDNS 是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。 SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果; 支持DOT,DOH,DOQ,DOH3,更好的保护隐私。 与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。 支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。
内容概要:本文详细介绍了基于S7-200 PLC和组态王软件构建喷泉控制系统的全过程。首先明确了系统的IO分配,包括启动按钮、停止按钮以及喷泉水泵的连接方式。接着展示了梯形图程序的设计,涵盖了基本的启停控制逻辑、定时循环和模式切换机制。随后提供了详细的接线图原理图,解释了输入输出部分的具体接线方法。最后讲述了组态王的画面设计,包括创建工程、定义变量和绘制监控界面等步骤。此外还分享了一些调试过程中遇到的问题及解决方案。 适合人群:对自动化控制感兴趣的初学者和技术人员,尤其是那些希望深入了解PLC编程和人机界面设计的人群。 使用场景及目标:适用于小型喷泉项目的实际控制系统开发,旨在帮助读者掌握PLC编程技巧、熟悉组态软件的应用,并能够独立完成类似的自动化控制系统设计。 其他说明:文中不仅包含了理论知识讲解,还附带了许多实践经验分享,如硬件配置建议、常见错误规避措施等,有助于提高实际操作能力。
内容概要:本文详细介绍了DSP28335在线升级的关键技术和实践经验。首先,文章讲解了最小系统的构建以及MemCopy函数的作用,强调了Flash操作API的使用方法,包括初始化、扇区解锁与锁定、擦除和写入等步骤。接着,讨论了参数存储管理和CMD文件的编写要点,提出了双备份升级方案和增量升级的方法。同时,阐述了上位机通信协议的设计,包括帧结构、校验方式和数据传输的具体实现。此外,还探讨了常见的升级策略,如跳转式升级、镜像式升级和差分升级,并提供了详细的代码示例。最后,强调了异常处理的重要性,特别是针对断电情况的解决方案,如硬件看门狗和状态标记的使用。 适合人群:具有一定嵌入式开发基础的技术人员,尤其是熟悉DSP架构和C/C++编程的工程师。 使用场景及目标:适用于需要进行DSP28335在线升级的项目,帮助开发者避免常见错误,提高升级的成功率和可靠性。 其他说明:文中提供了大量实际操作中的注意事项和技巧,有助于读者更好地理解和应用相关技术。
CDMA2000网络优化的研究毕业设计说明书.doc