Yes, I understand the problem; it's not new, and I understand that Chrome must 
have tightened this policy.

I'm wondering if, just as we added the Input-Type-file (delegate), it would be 
appropriate to add a "hidden button" that would call delegate.browser.

I've run a test. I created a button in the createDelegate() function, called 
delegateFileButton, and in its "click" event I called delegate.click [1] and in 
the browse function I launched a delegateFileButton.click() [2] but it didn't 
work. ☹ (In FireFox it still works fine)



[1]

COMPILE::JS

                               public function createDelegate():void

                               {

                                               delegate = 
document.createElement('input') as WrappedHTMLElement;

                                               delegate.setAttribute('type', 
'file');

                                               goog.events.listen(delegate, 
'change', fileChangeHandler);



                                               delegateFileButton = 
document.createElement('button') as WrappedHTMLElement;

                                               delegateFileButton.style.display 
= "none";

                                               delegateFileButton.onclick = 
function():void {

                                                                               
delegate.click();

                                                               };

                                               // I have also tried this:

                                               /*

                                               
goog.events.listen(delegateFileButton, 'click',

                                               function():void {

                                                                               
delegate.click();

                                                               } );

                                               */

                                               }

[2] public function browse():void

                               {

                                               COMPILE::SWF

                                               {

                                                               
delegate.browse();

                                               }

                                               COMPILE::JS

                                               {

                                                               focusedButton = 
document.activeElement as WrappedHTMLElement;

                                                               
//trace("activeElement is: " + focusedButton);

                                                               
focusedButton.addEventListener("blur", blurHandler);

                                                               
focusedButton.addEventListener("focus", focusHandler);

                                                               
window.addEventListener("keydown", keyHandler);

                                                               
window.addEventListener("mousemove", mouseHandler);

                                                               
window.addEventListener("mousedown", mouseHandler);

                                                               
delegateFileButton.click();

                                               }

                               }





Hiedra



-----Mensaje original-----
De: Josh Tynjala <joshtynj...@bowlerhat.dev<mailto:joshtynj...@bowlerhat.dev>>
Enviado el: lunes, 14 de abril de 2025 19:36
Para: dev@royale.apache.org<mailto:dev@royale.apache.org>
Asunto: Re: mx.net.FileReference chrome



Browsers have certain security restrictions where you can't call certain APIs 
unless the user has interacted with the page in some way. In this case, if you 
want to call FileReference.browse(), it must be triggered by a listener for a 
user gesture, such as mouse click or key down.



--

Josh Tynjala

Bowler Hat LLC

https://bowlerhat.dev/





On Mon, Apr 14, 2025 at 9:42 AM Maria Jose Esteve 
<mjest...@iest.com<mailto:mjest...@iest.com>> wrote:



> Hi,

> I need your help because I'm stuck.

> In one of my applications, I use mx.net.FileReference to select a

> user's photo.

> It's always worked fine for me, but yesterday, while testing, I

> noticed that it stopped working in Chrome, although it still works as

> expected in Firefox.

> I'm not getting any errors, but I do see a warning in the debug console:

> "File chooser dialog can only be shown with a user activation."

> The traceback points to org.apache.royale.file.beads.FileBrowser in

> the

> browse() method:

>

> public function browse():void

>         {

>             COMPILE::SWF

>             {

>                 delegate.browse();

>             }

>             COMPILE::JS

>             {

>                 focusedButton = document.activeElement as

> WrappedHTMLElement;

>                 //trace("activeElement is: " + focusedButton);

>                 focusedButton.addEventListener("blur", blurHandler);

>                 focusedButton.addEventListener("focus", focusHandler);

>                 window.addEventListener("keydown", keyHandler);

>                 window.addEventListener("mousemove", mouseHandler);

>                 window.addEventListener("mousedown", mouseHandler);

>                 delegate.click(); // <<<<<<<<<<

> -------------------------- Error

>             }

>         }

>

> I've verified that the delegate is still valid; it references the

> "input, type file" that's created.

> Any ideas on how to fix this?

>

> Thx.

> Hiedra

>

>

Reply via email to