`
babashengri
  • 浏览: 1508 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

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>
         <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>
        
     </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>
            
  
             <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="${width}" height="${height}" id="${application}">
                 <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[
   
   public function callJs():void{
     ExternalInterface.call("sayHello");
    
    }
   
   
    public function callJs1():void{
    //这里的 testdll是index.template.html 页面加入的js 函数
     ExternalInterface.call("testdll");
    
    }
   ]]>
  </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>
分享到:
评论

相关推荐

    Flex ActiveX通过JS相互调用.rar

    - 当Flex需要调用ActiveX方法时,会通过`ExternalInterface.call`调用预先在JavaScript中定义的接口,传递所需参数。 - JavaScript接收到调用请求后,执行相应的ActiveX方法,并将结果保存在一个全局变量或者...

    Flex4.5 与js,ocx相互调用

    JavaScript 调用 Flex 函数通常需要在 Flex 中先声明该函数为可外部访问的,然后在 JS 中通过 SWFObject 注册的名称来调用。 2. **Flex 与 ActiveX 控件交互**: Flex 4.5 支持与 ActiveX 控件的交互,主要是通过 ...

    Flex+asp 例子

    ASP通过ADO(ActiveX Data Objects)与Access进行数据交互,执行查询、更新等操作。 四、核心文件解析 1. guest.asp、send.asp、sendre.asp、read.asp:这些是ASP文件,分别对应登录、发送信息、接收回复和阅读文章...

    在MFC嵌入Flex并且相互通信

    在Flex端,我们可以注册ActionScript函数,使其能在JavaScript中调用,然后通过MFC调用JavaScript函数来实现通信。在MFC端,可以通过IE浏览器控件的接口调用JavaScript方法,从而传递数据和控制Flex应用的行为。 6....

    IE debug Flex debug

    总之,"IE Debug Flex Debug"是一个针对Flex开发人员的重要工具链,它通过Flash Player Debugger在IE中提供详细的错误信息和调试功能,帮助开发者高效地定位和修复问题。正确使用这个工具可以极大地提升开发效率和...

    基于Flex和RESTArcGIS Server发布方法.doc

    瘦客户端依赖HTTP、HTML、JavaScript等标准Web技术,而胖客户端则通过插件如Plug-in、ActiveX控件、Java Applet或SVG技术提升浏览器功能。目前,瘦客户端开发模式已成为WebGIS的主流,尤其是B/S架构的WebGIS。 然而...

    基于Flex的ArcIMS地图发布研究

    这种方案通过服务器端调用ArcIMS应用服务器连接器或通过客户端JavaScript组装ArcXML与ArcIMS应用服务器直接通信的方式接收用户请求。结果通常以HTML形式在浏览器中呈现。虽然这种方案技术较为成熟且开发模式固定,但...

    Flex通过JS获取客户端IP和计算机名的实例代码

    在Flex开发环境中,通过JavaScript获取客户端IP地址和计算机名的示例代码,主要涉及以下知识点: 1. Flex基础:Flex是由Adobe公司开发的一个开源的应用框架,用于构建跨平台的富互联网应用程序(RIA)。Flex结合了...

    flex通过js获取ip和pcname示例代码

    然后,这些JavaScript函数被引入到Flex应用中,通过Adobe Flex的`ExternalInterface`类实现JavaScript和ActionScript(AS)之间的通信。在Flex的MXML代码中,`creationComplete`事件触发时调用了这两个JavaScript...

    用C++builder 制作flash播放器的几个细节问题

    ActiveX控件允许C++代码直接控制Flash Player,而JavaScript接口则需要通过WebBrowser控件间接调用。这两种方法都需要对Flash Player的公开API有深入理解。 3. **事件处理**:Flash Player会触发各种事件,如加载...

    WPF嵌入Flash示例代码

    - 反之,WPF也可以通过设置Flash控件的属性或调用方法来影响Flash的行为。 6. **安全与性能考虑** - 鉴于Flash的安全问题和逐渐被淘汰的趋势,使用时要考虑其潜在风险。确保Flash Player已更新至最新版本,避免...

    pb与flash结合美化界面

    可以使用ActionScript调用PB的ActiveX接口,或者PB通过JavaScript与WebViewer中的Flash进行交互,实现数据的传递。 - **性能优化**:Flash元素可能会增加应用的内存占用和CPU使用,因此在设计时要考虑到性能影响,...

    网页中嵌入swf文件的几种方法

    2. 对于微软的SP2 IE版本,由于其对ActiveX控件的安全限制增强,直接在页面中加载ActiveX可能会出现问题,需要通过JavaScript来调用Flash对象才能解决。 3. 缺少对Flash Player版本的检查机制,在缺少或版本不兼容的...

Global site tag (gtag.js) - Google Analytics