Flex +javascript +Activex FLex 通过Javascript 调用ActiveX 操作硬件问题

我现在遇到这样的问题,公司做一套miss产品也就是我们的收银,仓储管理之类的软件 这个时候会和很多的硬件打交道,例如 pos收银机,打票机,钱箱 ,扫描器等等。 我们界面准备用flex来做, 后台用java (Spring +hibernate) +Blazeds ,现在就是遇到了flex和硬件打交道的问题。因为厂商提供的接口 都是dll 所以我是 通过Activex 封装厂商提供的Dll ,然后javascript 去调用ActiveX,然后flex 调用javascript. 但是在页面 引用 <object id="test" codeBase="test.CAB#1,0,0,1" classid="CLSID:E1BAF4EF-D3AA-4526-9A75-3E52CCDE1D2A" ></object>
,这个对象的时候, flex 找不到任何信息. 也不报错, 这个activeX 我用html代码测试是没有问题的。 能正确得到dll返回的值。 把代码写在 flex的页面就不行了、 下面我贴出我的代码

首先在 flex 里面,我在index.template.html 里面加入的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<!--
Smart developers always View Source.

This application was built using Adobe Flex, an open source framework
for building rich Internet applications that get delivered via the
Flash Player or to desktops via Adobe AIR.

Learn more about Flex at http://flex.org
// -->
<head>
<title>${title}</title>
<meta name="google" value="notranslate" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Include CSS to eliminate any default margins/padding and set the height of the html element and
the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as
the percentage of the height of its parent container, which has to be set explicitly. Fix for
Firefox 3.6 focus border issues. Initially, don't display flashContent div so it won't show
if JavaScript disabled.
-->
<style type="text/css" media="screen">
html, body { height:100%; }
body { margin:0; padding:0; overflow:auto; text-align:center;
background-color: ${bgcolor}; }
object:focus { outline:none; }
#flashContent { display:none; }
</style>

<!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
<!-- BEGIN Browser History required section ${useBrowserHistory}>
<link rel="stylesheet" type="text/css" href="history/history.css" />
<script type="text/javascript" src="history/history.js"></script>
<!${useBrowserHistory} END Browser History required section -->

<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
// For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.
var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";
// To use express install, set to playerProductInstall.swf, otherwise the empty string.
var xiSwfUrlStr = "${expressInstallSwf}";
var flashvars = {};
var params = {};
params.quality = "high";
params.bgcolor = "${bgcolor}";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "${application}";
attributes.name = "${application}";
attributes.align = "middle";
swfobject.embedSWF(
"${swf}.swf",
"flashContent",
"${width}",
"${height}",
swfVersionStr,
xiSwfUrlStr,
flashvars,
params,
attributes
);
// JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
</script>
[color=red] <script >
function sayHello(){

alert("你好 伙计!");
}

</script>
<script language="javascript">
function testdll()
{

// alert("bbb");
// var btn=document.getElementById("btn").value;
// alert(btn);
//var did=document.getElementById("test").value;
// alert(did);
//这里导入了我的Activex 打包的cab文件 叫test.CAB 里面的Dll有 个叫GetContent的方法,有两个参数 ,是int类型的, 返回的是 这两个参之和; 我在html代码里面测试了 是没问题的。 能正确返回 值 2;
var sun = test.GetContent(1,1);

alert(sun);

}
</script>[/color]
</head>
<body>
<object id="test" codeBase="test.CAB#1,0,0,1" classid="CLSID:E1BAF4EF-D3AA-4526-9A75-3E52CCDE1D2A" ></object>
<!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough
JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show
when JavaScript is disabled.
-->
<!---->
<input id="btn" value="点击我" type ="button" style="display:none"/>
<div id="flashContent">
<p>
To view this page ensure that Adobe Flash Player version
${version_major}.${version_minor}.${version_revision} 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>

<noscript>

[color=red]
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="${width}" height="${height}" id="${application}">[/color] <param name="movie" value="${swf}.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="${bgcolor}" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="${swf}.swf" width="${width}" height="${height}">
<param name="quality" value="high" />
<param name="bgcolor" value="${bgcolor}" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<!--<![endif]-->
<!--[if gte IE 6]>-->
<p>
Either scripts and active content are not permitted to run or Adobe Flash Player version
${version_major}.${version_minor}.${version_revision} or greater is not installed.
</p>
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>

</noscript>
</body>
</html>


这里是我的flex 的MXML 代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[

[color=red] public function callJs():void{
ExternalInterface.call("sayHello");

}


public function callJs1():void{
//这里的 testdll是index.template.html 页面加入的js 函数
ExternalInterface.call("testdll");

}[/color] ]]>
</fx:Script>
<s:Button id="btn" x="12" y="10" label="FLex 调用 js" click="callJs()">

</s:Button>
<s:Button id="btn1" x="10" y="77" label="FLex 调用 js and dll" click="callJs1()"/>
</s:Application>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值