我无法模拟对通过API调用(youtube as3 API)生成的按钮(displayObject)的单击调用。我没有看到任何关于安全原因的提及,只要用点击处理程序注册了某些内容,我就无法模拟点击。
基本上我检查过以确保所制作的按钮正在用以下方式监听鼠标点击事件:
trace(generatedButton.hasEventListener(MouseEvent.CLICK))
返回true
我继续称之为:
generatedButton.dispatchEvent( new MouseEvent(MouseEvent.CLICK, true) );
如果我实际点击它工作的按钮,也没有任何反应。是否有一些安全措施可以防止虚假点击,除非它的来源严格来自系统鼠标?
我甚至在点击功能上设置了一个超时调用,并将光标移到按钮上并让它触发,以防鼠标不得不覆盖对象但仍然没有问题。我有点难过。
任何帮助将不胜感激!
答案 0 :(得分:2)
好吧,我做了一个快速的FLA并编写了这段代码,并且调度鼠标事件完美运行..
import flash.events.MouseEvent;
myButton.addEventListener(MouseEvent.CLICK, myClickHandler);
function myClickHandler(e:MouseEvent):void
{
trace("clicked");
}
setTimeout(function()
{
myButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
},2000);
YouTube api必须阻止此类内容
答案 1 :(得分:2)
以下代码在我的本地沙箱中正常工作。
btn.addEventListener( MouseEvent.CLICK, test )
function test( e:Event ):void{
trace('asdf');
}
btn.dispatchEvent( new MouseEvent( MouseEvent.CLICK ) );
所以我只得出两个结论
首先是安全问题。 Flash在触发FileReference类的单击事件中存在一些安全问题,只有在堆栈中有用户单击时才能使用它。这个问题可能会延续到该事件的任何人为调度。它适用于我的沙盒,因为此处的限制不适用。
第二个是你要很快调度事件,而按钮监听器还没有从api添加到按钮。
在这种情况下,尝试在调用舞台渲染事件后调用调度。
stage.addEventListener( Event.RENDER, test )
function test( e:Event ):void{
btn.dispatchEvent( new MouseEvent( MouseEvent.CLICK ) );
}
无论如何,只是我的猜测。
答案 2 :(得分:0)
而不是做一个最终会调用方法的dispatchEvent,只需调用该方法,并且因为它需要一个MouseEvent,所以yourClickMethod(null)
答案 3 :(得分:0)
您无法模拟服务器上的点击事件,这是因为安全问题。您可以直接调用方法,而不是dispatchingEvent。我会寻找描述,但它是非法的。您可以查看firefox firebug日志以获取错误说明。