标签: externalinterface

没有SWFObject.js的Javascript到Flash通信

想知道是否可以在不使用SWFobject或任何其他额外的javascript文件的情况下从javascript到flash进行通信.

目前我正在使用以下指南:http: //www.viget.com/inspire/bi-directional-actionscript-javascript-communication

感谢您的时间.

javascript flash swfobject externalinterface

5
推荐指数
1
解决办法
1629
查看次数

尝试从JS调用ActionScript函数时出现安全性错误

我有一个小测试swf来测试从JavaScript调用ActionScript(3.0)函数.我使用Flash文档作为参考:(http://www.adobe.ca/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000340.html)页面加载我出现Flash Player错误:

SecurityError: Error #2060: Security sandbox violation: ExternalInterface caller file: c:/externalinterface.swf cannot access file: c:\myhtml.html
at flash.external::ExternalInterface$/_initJS()
    at flash.external::ExternalInterface$/addCallback()
    at externalinterface_fla::MainTimeline/frame1()
Run Code Online (Sandbox Code Playgroud)

这是ActionScript:

 import flash.external.ExternalInterface

function callMe(name:String):String{

    return "busy signal";

    }

    ExternalInterface.addCallback("myFunction",callMe);
Run Code Online (Sandbox Code Playgroud)

和JS:

<script type="text/javascript" language="javascript">
    function callSwf() {
        var callResult = flashObject.myFunction("Nick");
        alert(callResult);
    }   

</script>
Run Code Online (Sandbox Code Playgroud)

最后HTML对象:

<object width="550" height="400">
<param name="movie" value="externalinterface.swf">
<embed src="externalinterface.swf" width="550" height="400">
</embed>
</object>
Run Code Online (Sandbox Code Playgroud)

我们如何解决这个问题?

flash actionscript-3 externalinterface

5
推荐指数
1
解决办法
1万
查看次数

flash:ExternalInterface适用于embed标签,但不适用于object标签

据Adobe称,嵌入Flash对象的"现代"更新方式:

        <object id="theFlash" name="theFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
         width="400" height="225" align="middle">
            <param name="movie" value="theflashfile.swf" />
            <param name="allowScriptAccess" value="always" />
            <!--[if !IE]>-->
            <object type="application/x-shockwave-flash"
             data="getStreamFrame.swf" width="400" height="225">
            <param name="allowScriptAccess" value="always" />
            <!--<![endif]-->
            <a href="http://www.adobe.com/go/getflash">
                <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>
Run Code Online (Sandbox Code Playgroud)

尝试在SWF中调用AS3函数时,从Javascript:

     var flashObj = document.getElementById('theFlash');
     flashObj.someASFunction();
Run Code Online (Sandbox Code Playgroud)

(在AS方面:)

     import flash.external.*;
     function someASFunction() {
        //show some text
     }
     ExternalInterface.addCallback("someASFunction", someASFunction);
Run Code Online (Sandbox Code Playgroud)

不会在Firefox和Chrome的工作.闪光灯工作和加载.flashObj确实获得了对象的引用,但someASFunction未定义且不会被调用.

如果我用embed标签替换object标签:

   <embed id="theFlash" name="theFlash" height="225" width="400" align="middle" 
    type="application/x-shockwave-flash" allowscriptaccess="always"
    src="theflashfile.swf" />
Run Code Online (Sandbox Code Playgroud)

然后它适用于Firefox和Chrome(AS函数被调用并正常工作) - (虽然它在IE中不起作用). …

javascript flash actionscript-3 externalinterface

5
推荐指数
1
解决办法
5301
查看次数

Flash:我可以禁止ExternalInterface访问加载的SWF吗?

我们有一个Flash应用程序(AS3).这是一个在我们自己的投影仪中运行的桌面应用程序.没有空气.投影机是用C++编写的.投影机通过ExternalInterface为Flash部件提供对Windows API的间接访问.

现在我们想让我们的社区创建插件.只是让他们用一些动作脚本3制作一个小动画.

插件将在运行时作为外部.swf文件加载.当然,我们希望我们的用户在网上分发插件.

但是,我们有安全问题.如果某个坏人会利用间接访问Win API怎么办?

我做了一个小测试.加载到程序中的子.swf尝试调用ExternalInterface方法.事实证明,child.swf能够做到这一点.因此,加载到我们程序中的每个.swf文件都将自动访问Win API.

下载我们程序的插件变得和.exe文件一样危险.

我们可以禁止对加载的.swf进行ExternalInterface访问吗?如果不是 - 在安全性考虑的情况下,如何在AS3中实现插件系统?

我很感激任何有用的提示.

security flash externalinterface

5
推荐指数
1
解决办法
418
查看次数

IE9中的ExternalInterface.call泄漏

我创建了一个非常简单的SWF来演示:

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.external.ExternalInterface;

    public class FlashIELeak extends MovieClip {

        public function FlashIELeak() {
            addEventListener(Event.ENTER_FRAME, onFrame);
        }

        private function onFrame(e:Event):void {
            ExternalInterface.call("test", null);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在Chrome中加载,没有问题.记忆保持或多或少固定.

在IE和内存中的负载只是持续上升 - 大约30k/s.您甚至不需要声明测试功能.只是将swf嵌入页面中,你就会泄漏.在我们的项目中,我们传递了一个具有多个属性的对象,IE正在以120k/s的速度泄漏.不好.

有人见过这个吗?我无法找到与此相关的任何其他帖子.

flash internet-explorer memory-leaks externalinterface

5
推荐指数
1
解决办法
546
查看次数

as3 ExternalInterface.addCallback无法正常工作

我试图从javascript访问swf,所以我在tryocs中的这个例子是我想要修改的.http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#includeExamplesSummary

但是,由于某种原因,它无法正常工作.我遇到的问题是它在Safari和Firefox中不起作用,只有在javascript将值传递给swf之前在函数中放置警报时它才有效.(似乎需要一些时间)我也尝试在as3中设置一个计时器,但是计时器不起作用,只有js中的警报才有帮助.

我想做的就是使用js告诉swf文件播放ep1.swf.这是我的js代码:

document.observe('dom:loaded', function() {
    $('episode1').observe('click', function() {
        var params = {wmode : "transparent", allowScriptAccess:"always", movie:"header"};
        swfobject.embedSWF("swf/float.swf", "header", "100%", "100%", "9.0.0","expressInstall.swf", "", params, "");
        sendToActionScript("ep1.swf");
    });
})
function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        //alert("aaa")
        return document[movieName];
    }
}
function sendToActionScript(value) {     
    thisMovie('header').sendToActionScript(value);       
}
Run Code Online (Sandbox Code Playgroud)

这是我的as3代码:

private function receivedFromJavaScript(value:String):void {

    loader.load(new URLRequest(value));

}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很长时间,有谁知道如何解决这个问题?谢谢.

javascript actionscript-3 externalinterface addcallback

4
推荐指数
1
解决办法
2万
查看次数

如何从actionscript中读取全局javascript变量

鉴于我的网页上有一个名为myVar的全局javascript变量,如何使用javascript从我的flash影片中访问变量myVar的值?

我看到很多使用外部接口的例子,以便从actionscript执行javascript,但是我无法找到使用actionscript将值返回到flash影片的示例.

提前致谢.我希望我的问题很清楚.

javascript actionscript externalinterface

4
推荐指数
1
解决办法
8269
查看次数

在Flash中使用ExternalInterface

我正在尝试编辑一些flash以进行外部javascript函数调用,但没有成功.这是我的actionscript 2.0代码:

//testing external .js calls

import flash.external.ExternalInterface;

//attempting to make external js call

ExternalInterface.call("createPlaylist","It's my Life!");
Run Code Online (Sandbox Code Playgroud)

这是我的javascript;

function createPlaylist(mess){
  alert("called createPlaylist: " + mess);
}
Run Code Online (Sandbox Code Playgroud)

我见过很多例子,我对使用它感到困惑 ExternalInterface.addCallback.我不需要javascript将任何内容返回给flash,这是必要的吗?

无论出于何种原因,我从未看到警报.有没有人在我的代码中看到任何问题?有ExternalInterface没有我没有的图书馆?另外,最好的使用方法是什么ExternalInterface(即错误检查等),在此先感谢...

flash actionscript externalinterface

4
推荐指数
1
解决办法
2万
查看次数

Flash AS2.0和JavaScript/jQuery(ExternalInterface)通信

我试图使用JS将数据发送到带有ExternalInterface的Flash AS2.0音乐播放器,除了我找不到有关ExternalInterface的好教程或指南.我希望能够通过单击JavaScript链接更改播放器中的当前歌曲,并在页面/窗口加载时不点击,播放默认歌曲.

我不需要在闪存等中加载声音的超级复杂的答案,我只是在让JS向Flash发送任何内容时遇到很多困难,当我开始工作时 - 我是否需要将一些if/else放入闪存以确定链接是否已被点击?

谢谢

编辑继承人现在的代码:

AS 2.0

import flash.external.ExternalInterface;

ExternalInterface.addCallback('loadSong', null, flashFunction);

function flashFunction (val) {
    extra = val;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var flashObj = document.getElementById('VSPLAYER');

function loadSong(val) {
    return val
}
Run Code Online (Sandbox Code Playgroud)

HTML

<a href="javascript:loadSong('2')">Play song 2</a>

<object id="VSPLAYER" type="application/x-shockwave-flash" data="vs_player.swf" width="280" height="90">
<param name="movie" value="vs_player.swf" />
<param name="allowscriptaccess" value="always" />
</object>
Run Code Online (Sandbox Code Playgroud)

javascript flash actionscript-2 externalinterface

4
推荐指数
1
解决办法
1万
查看次数

控制来自第三方的document.write调用的范围

我正在编写一个依赖外部javascript文件(我无法控制)的网页,它使用document.write返回数据.有没有办法动态调用函数而不覆盖整个文档?这是我能想到的最简洁的代码:

<html>    
<head>
<script type="text/javascript">
    function horriblefunction () {
        document.write("new text");
    }
</script>
</head>

<body>
Starting Text...
<div id="pleasewriteinme"></div>
Other text...
<button onclick="horriblefunction();">Click</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这个想法开始,不改变"horriblefunction()"(因为它是外部的)新文本可以放在div而不是覆盖页面.这是可能的,还是在创建页面时必须在div中调用函数?

谢谢你的帮助

html javascript dom externalinterface document.write

4
推荐指数
1
解决办法
990
查看次数