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。这样可以避免整个页面刷新,提高用户体验。在题目...
VS集成C#开发ABB机器人二次开发:实时变量刷新与程序修改上位机系统,vs对ABB机器人二次开发C#集成PC SDK开发ABB机器人上位机开发 变量实时刷新,实时修改 io刷新修改, 在线程序修改实时刷新 上位机移动机械手 ,vs;ABB机器人二次开发;C#集成PC SDK;实时刷新;实时修改;io刷新修改;在线程序修改;上位机移动机械手,C#集成PC SDK开发ABB机器人上位机系统:实时刷新与修改功能
分布式系统与SCADA系统
,电机控制资料-- 注:本驱动器适合于直流有感无刷电机 功能特点 支持电压9V~36V,额定输出电流5A 支持电位器、开关、0~3.3V模拟信号范围、0 3.3 5 24V逻辑电平、PWM 频率 脉冲信号、RS485多种输入信号 支持占空比调速(调压)、速度闭环控制(稳速)、电流控制(稳流)多种调速方式 支持按键控制正反转速度,启停 特色功能 1. 霍尔自学习 电机的三相线和三霍尔信号线可不按顺序连接,驱动器可自动对电机霍尔顺序进行学习。 2. 稳速控制响应时间短 稳速控制时电机由正转2000RPM切为反转2000RPM,用时约1.0s,电机切过程平稳 3. 极低速稳速控制 电机进行极低速稳速控制,电机稳速控制均匀,无忽快忽慢现象。
欧姆龙CX-Programmer CP系列PLC功能块详解:伺服、步进、气缸及普通电机控制应用解析,欧姆龙cx-programmer CP系列PLC做的功能块,包括伺服,步进,气缸普通电机的控制。 ,欧姆龙CX-Programmer; CP系列PLC; 伺服控制; 步进控制; 电机控制; 气缸控制,欧姆龙CX-Programmer PLC:CP系列功能块与多种电机控制
基于comsol电弧与熔池热物理交互现象的研究,comsol电弧熔池耦合 ,comsol; 电弧熔池; 耦合,COMSOL电弧与熔池的耦合技术
,自动泊车APA开发,超声波算法开发
nodejs010-nodejs-config-chain-1.1.8-2.el6.centos.alt.noarch.rpm
FLAC3D蠕变命令流详解:博格斯本构模型的时间步长自动调整实践与应用,附图一至图三竖向位移云图变化及图四拱顶沉降趋势分析。,flac3d蠕变命令流,蠕变本构模型采用博格斯本构,时间步长自动调整,5.0和6.0命令均有,配有文字和视频解释。 图一至图三为不同蠕变时间下的竖向位移云图,图四为拱顶沉降随时间的变化趋势。 ,flac3d;蠕变命令流;博格斯本构;时间步长自动调整;5.0和6.0命令;文字解释;视频解释;竖向位移云图;拱顶沉降随时间变化趋势。,FLAC3D蠕变命令流:博格斯本构自动调整时间步长解释
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
超导电机性能及波形特征分析,某超导电机性能及其波形 ,超导电机性能; 波形; 性能指标; 波形分析,超导电机性能与波形分析
逆磁致伸缩效应:应变与磁导率互变之效应解析,逆磁致伸缩效应,应变造成磁导率改变 ,逆磁致伸缩效应; 磁导率变化; 应变影响; 磁性材料响应,逆磁致伸缩效应:磁导率随应变变化
基于VS2015+Qt5.9+Halcon20的多个相机缺陷检测源码,可稳定运行并支持多种相机缺陷检测功能,多个相机缺陷检测源码 vs2015+qt5.9+halcon20 可正常运行 ,多个相机;缺陷检测;源码;VS2015;Qt5.9;Halcon20;可正常运行,"Halcon源码检测系统,基于VS2015与Qt5.9,相机缺陷检测"
内容概要:本文旨在作为GitHub平台针对初学者的实用教程,涵盖从GitHub账号注册、仓库创建、代码管理、提交以及团队协作等全过程。文章详述了GitHub的基础使用方法,包括如何创建和配置代码仓库、使用Git命令进行代码的上传和变更处理、参与到开源项目的步骤,以及创建团队和管理权限的方式。还介绍了几个重要的Git命令及其作用,有助于用户理解版本控制系统的核心思想。通过这些指导,能够使开发者更快地适应这一流行工具,从而提升编码效率,提高协作效能。此外,也推荐使用者多多练习并投身实际操作,以此来累积更多的使用技巧。 适用人群:面向所有初次接触或正在初步探索GitHub使用方法的新用户,无论是独立工作者还是软件工程专业的学生均能从中受益。 使用场景及目标:主要目的是为了让新手能迅速熟悉并掌握GitHub的各项基本技能,以便更好地应用于日常的代码开发过程中。无论你是想要将自己的作品分享出来获取反馈,或是加入某个开源社区贡献自己的一份力量,本文都能提供完整的路径指引。 其他说明:虽然本指南涵盖了GitHub最常用的特性介绍,但对于高级设置及更复杂的用例则有所省略,若想深入了解相关进阶知识点,请参阅官方文档或者进一步研究其他权威资料。
deepseek部署教程.md
"Comsol电力变压器内部热源计算与热流耦合分析模型:温度场与流体场数值计算方法研究",comsol电力变压器温度场和流体场数值计算模型,通过变压器电磁场计算得到热源大小,最后通过热流耦合计算得到变压器内部温度场和流体场分布, ,核心关键词:Comsol模型; 电力变压器; 温度场; 流体场; 数值计算; 电磁场计算; 热流耦合计算; 内部温度场分布; 流体场分布。,"电力变压器温度场与流体场数值计算模型研究"
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:publican-redhat-2.7-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/publican-redhat-2.7-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
S7-200 Smart V3.0 固件升级包_测试版2025.02