I just tested one of my non-Royale apps that calls click() on the <input
type="file"> element. It still works in that app when tested in Chrome.
It's a very similar situation, where I have a separate <div> element with a
"click" listener, and the listener calls click() on the <input type="file">
element.

Perhaps you should add a breakpoint in the debugger and check what your
call stack looks like. Maybe there's a clue there.

--
Josh Tynjala
Bowler Hat LLC
https://bowlerhat.dev/


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

> 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