江久伟 2013-12-05 07:18 采纳率: 0%
浏览 3592

js调用flex的开启摄像头的方法失败

我用JavaScript调用Flex方法开启摄像头的方法总是失败。但是Flex直接在CreatComplete方法里面调用开启摄像头的方法是成功的。有人说是安全沙箱的问题,我在我的asp.net根目录下扔了一个crossdomain.xml文件也没用。请大神帮助提供解决的方案。
flex代码:

public function init():void{
            ExternalInterface.addCallback("openCamera", setupCamera);
        }

        //初始化摄像头
        public function setupCamera():void{
            //启动摄像头
            cam = Camera.getCamera(); 
            if(cam != null){
                cam.addEventListener(StatusEvent.STATUS,onStatusHandler);
                cam.addEventListener(ActivityEvent.ACTIVITY,onActiveHandler);
                cam.setMode(320,240,30);
                cam.setQuality(0,100);  //设置清晰度
                vi = new Video();
                vi.width = 320;
                vi.height = 240;
                vi.attachCamera(cam);
                vdisplay.addChild(vi);
            }
        }
               private function onActiveHandler(event:ActivityEvent):void
        {
            if(!cam.muted){    //判断摄像头存不存在
                startRec.enabled = true;
            }else{
                Alert.show("错误2:无法链接到活动摄像头!");
            }
            cam.removeEventListener(StatusEvent.STATUS,onStatusHandler);
        }

        private function onStatusHandler(event:StatusEvent):void{
            if(!cam.muted){    //判断摄像头存不存在
                startRec.enabled = true;
            }else{
                Alert.show("错误1:无法链接到活动摄像头!")
            }
            cam.removeEventListener(StatusEvent.STATUS,onStatusHandler);
        }

JS:

<script type="text/javascript" language=javascript>
    function openCamera() {
        document.getElementById("v").openCamera();
    }

html:














  • 写回答

2条回答

  • 你那表示法 2013-12-05 07:30
    关注

    1.Flex里面使用ExternalInterface.call(“Js函数名称”,参数)进行调用javascript方法,其返回的值就是Js函数所返回的值。

    2.在初始化方法中使用ExternalInterface.addCallback(“注册的方法名”,As中的函数名)进行注册,“注册的方法名”可以再javascript中直接调用

    3.在js中,就可以用document.getElementById(“Flash在Html中的ID”).注册的方法名(参数)进行调用,当然,默认”Flash在Html中的ID”就是Flex文件的名称,例如,我们这里就是SampleApp,因为我们的Flex文件就是SampleApp.mxml

    //Flex代码
    <?xml version="1.0" encoding="utf-8"?>
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    creationComplete="application1_creationCompleteHandler(event)"
    minWidth="955" minHeight="600">

    <fx:Script>
        <![CDATA[
            import flash.external.*;
    
            import mx.controls.Alert;
            import mx.events.FlexEvent;
            protected function text_clickHandler(event:MouseEvent):void
            {
                myFunc();
            }
    
            public function myFunc():void 
            {
                Alert.show("Invoke Ok");                
            }
    
            public function getValue():Number 
            {
                return 84;        
            }
    
            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                ExternalInterface.addCallback( "myFlexFunction" ,myFunc);
                ExternalInterface.addCallback( "getValue" ,getValue);
            }
    
        ]]>
    </fx:Script>
    
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    
    <mx:Button id="Test" label="Hello" click="text_clickHandler(event)">
    
    </mx:Button>
    

    /s:Application

    //HTML代码,Flex自动生成的代码中小改动。


    <!-- 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.
    -->


    To view this page ensure that Adobe Flash Player version
    11.1.0 or greater is installed.


        <noscript>
            <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100px" height="100px" id="SampleApp">
                <param name="movie" value="SampleApp.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#ffffff" />
                <param name="allowScriptAccess" value="sameDomain" />
                <param name="allowFullScreen" value="true" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="SampleApp.swf" width="100px" height="100px">
                    <param name="quality" value="high" />
                    <param name="bgcolor" value="#ffffff" />
                    <param name="allowScriptAccess" value="sameDomain" />
                <!--<![endif]-->
                <!--[if gte IE 6]>-->
                    <p> 
                        Either scripts and active content are not permitted to run or Adobe Flash Player version
                        11.1.0 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>     
    
        <input type="button" value="test" onclick="TestFlex()"/>
    


    <br> function TestFlex()<br> {<br> var obj=document.getElementById(&#39;SampleApp&#39;); <br> //obj.myFlexFunction(); <br> var vals=obj.getValue();<br> alert(vals);<br> }<br>

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧