2011-11-02 257 views
3

我無法模擬通過API調用(youtube as3 API)生成的按鈕(displayObject)的點擊調用。我還沒有看到任何關於安全原因的提及,只要點擊處理程序註冊了某些東西,我就無法模擬點擊。模擬鼠標點擊AS3

基本上我檢查,以確保所做的按鈕是聽一個鼠標點擊事件有:

trace(generatedButton.hasEventListener(MouseEvent.CLICK))返回true

我開始比稱之爲:

generatedButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK, true));

如果我物理地點擊它的按鈕,什麼也沒有發生。是否有一些安全措施可以防止某些東西被點擊,除非其來源嚴格來自系統鼠標?

我甚至在點擊函數上設置了一個超時調用,並將光標移動到按鈕上,並在它是一個鼠標不得不超過對象但仍然沒有的問題時觸發它。我有點在這一點上難住。

任何幫助,將不勝感激!

+0

你有沒有得到這個工作?我碰巧遇到了完全相同的情況 - 嘗試模擬Youtube生成的DisplayObject上的鼠標點擊。 我懷疑你是對的 - 這是與安全有關的事情(我模擬的水印點擊工作得很好,但我的廣告「點擊」失敗)。 這非常惱人 - 我有一個覆蓋圖,我試圖通過點擊「通過」,以便YouTube播放器的廣告正常工作。否則,我的UI代碼即將變得更加混亂。 :/ – Clippy

回答

0

而不是做一個dispatchEvent,最終無論如何調用的方法,只需調用方法,因爲它的預期的MouseEvent,做yourClickMethod(null)

+0

這將是很好,如果我創建處理函數= p。該按鈕由youtube as3 api生成,我無法訪問它的來源。因此,無論由於點擊事件而被調用的處理函數,我都不知道。我只是想觸發該點擊事件,就好像有人點擊了它一樣。 –

+0

實際點擊此按鈕時會發生什麼? – Ronnie

+0

它在youtube播放器中播放帶有按鈕創建功能傳入的youtube ID的視頻。 看起來像這樣(僞代碼): generatedButton = youtubeVideoPlayer.createButton(video_id) –

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必須阻止反對這樣的事情

+0

是的,當我在另一個項目中手動設置它,只是爲了確保我沒有發現錯誤,它工作正常。我只是想知道他們如何阻止它,而不是系統鼠標擊中 –

+0

我認爲它在當地運行良好。檢查服務器。 – ymutlu

2

下面的代碼工作正常,在我的本地沙箱。

btn.addEventListener(MouseEvent.CLICK, test) 

function test(e:Event):void{ 
    trace('asdf'); 
} 

btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK)); 

所以我只能得出2個結論。
首先是安全問題。 Flash觸發FileReference類的點擊事件存在一些安全問題,只有當用戶點擊堆棧時才能使用它。這個問題可能會延續到任何人爲派遣該事件。它在我的沙箱中工作,因爲限制在這裏不適用。

第二個是你正在調度事件,按鈕監聽器沒有被添加到API的按鈕。
在這種情況下,請在調用階段呈現事件後嘗試調用dispatch。

stage.addEventListener(Event.RENDER, test) 
function test(e:Event):void{ 
    btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK)); 
} 

只是我的猜測反正。

0

您無法模擬服務器上的點擊事件,這是因爲安全問題。您可以直接調用方法,而不用dispatchingEvent。我會尋找描述,但它是非法的。你可以檢查firefox的螢火蟲日誌中的錯誤描述。