没有ExternalInterface的Javascript和Flash / ActionScript之间的交互?

时间:2010-12-15 05:38:42

标签: javascript flash actionscript-3 greasemonkey

是否可以在没有ExternalInterface的情况下使用Javascript单击/获取ActionScript值/操作?

GreaseMonkey的工作原理是什么?我可以使用GreaseMonkey吗?

2 个答案:

答案 0 :(得分:2)

怎么样

swf=document.embeds[0];//or 1 or 2 etc
swfvar1=swf.GetVariable("swfvariable");
swfvar2="something";
swf.SetVariable("swfvariable",swfvar2);

其     的getVariable( “swfvar”); 将var名称作为字符串 和     SetVariable( “swfvar”,jsval); 将swfvar名称作为字符串,将js值作为任何你想要的值

执行功能,有2种方式 1.使用var swf上面的代码,     swf.SwfFunc(PARAMS); 简单吧?是

2.使用上面的代码     swf.GetVariable( “SwfFunc(PARAMS)”); 因为它获取了函数的值,所以它执行它以查找返回值,如果params丑陋且重叠引号可能会很糟糕,因为调用中已有引号

就个人而言,我喜欢方法2,因为它也可以用于其他目的,比如执行代码。像这样

swf.GetVariable("
function(){
//whatever
}");

我发现这非常有用,但请记住你必须在该函数中转义引号 它实际上就像注入一个eval语句,但更好

答案 1 :(得分:1)

它很难但可能在javascript中实现LocalConnectionNetStream直接连接(使用send()方法)。

另一种方法是使用某些东西作为缓冲区,每隔一段时间由SWF和javascript检查。一个简单的PHP脚本将是一个很好的缓冲区,也许这些数据可以存储在浏览器地址栏中 #

还有一个有趣的想法:你可以开发一个SWF信使,每次你需要将信息传递给flash时都会加载。消息作为get变量传递给messenger,它将创建一个带有主swf的LocalConnection并在那里传递数据。但是从flash调用js的唯一方法是navigateToURL或者sendToURL