Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Problem/Bug]: In WebView2-hosted page, JavaScript window's position properties initially have wrong values #5003

Open
SpoilerJones opened this issue Dec 17, 2024 · 3 comments
Assignees
Labels
bug Something isn't working

Comments

@SpoilerJones
Copy link

What happened?

My WinForms app can manage multiple windows with WebView2 controls navigated to pages from the same web application. Sometimes the JavaScript code running in these pages has UI-adjustment code that depends on the size and position of the window. But if that code runs very early in the page lifecycle, the window object's position properties (screenLeft/screenX and screenTop/screenY) return 0 instead of the actual position they should. If that logic runs after an asynchronous delay, then the values it sees are accurate.

For example, if the startup code looks like this:

alert(`Window position: (${window.screenLeft}, ${window.screenTop})`);
setTimeout(
    ()=>alert(`Window position: (${window.screenLeft}, ${window.screenTop})`),
    0);

Then the two subsequent alert dialogs will report (0, 0) followed by numbers that match the window's actual position. C# code inspecting the window's Form's position before running that script agrees that the numbers should not be (0, 0).

I have a couple workarounds I can use for this issue, but they're both pretty ugly, and reorganizing the web app's logic to avoid reading the position too early would be a big undertaking.

(The window's position is also affected by this issue, but I have a separate workaround for it.)

Importance

Moderate. My app's user experience is affected, but still usable.

Runtime Channel

Stable release (WebView2 Runtime)

Runtime Version

131.0.2903.99

SDK Version

2535.41

Framework

Winforms

Operating System

Windows 11

OS Version

22631.4602

Repro steps

WrongJSWindowLocation.zip

  1. Run the demo app in that folder.
  2. Click the Launch Second Window button to launch a window in which the script code will run.
  3. Observe the position values reported in alert dialogs in the new window.

The first alert should say the window is at (0, 0) when it should instead be in the middle of your screen. The second alert will report a position that is more or less in agreement with the window's real position.

Repros in Edge Browser

No, issue does not reproduce in the corresponding Edge version

Regression

Don't know

Last working version (if regression)

No response

@SpoilerJones SpoilerJones added the bug Something isn't working label Dec 17, 2024
@xTHExBIGxDEALx
Copy link

�����������R}H��
���膖�������*<VA�Y[�4RM��%:�"3*�q���kn����,,9�E��<{р���������N��,����咓�E�#�����$�t{��G�#��20N�2�Z̶���nRJuE��h�����h޵>"�ǜ�t )��������[���}��Qј���ʅ��5�Y�5��g���+���-���(����A�!�ZB���}�ٺ����_ ~Iɿ���L�������4����y����h��� � �"����X�)�����D���(!�-��
���M��u�����w��@x�#��C��Z���p���g���2[�b�X���oɷ����:��jY�[8Dr����w�� ~������#0(��&O�����W�8����J���mnk������Ĺ�p��
�9��
�NTu<��A>Z���ȳ]�pLJ(s���g��j7ɪ�r�62y.E9�ꗥ���F�i��9ν�ki��9|�C��3��^�"r��H��x�S�q�:&���&�͔�i� �}����)�+������;��ӵ��A�*Z�;�WM�0����I�

@xTHExBIGxDEALx
Copy link

this:

alert(Window position: (${window.screenLeft}, ${window.screenTop}));
setTimeout(
()=>alert(Window position: (${window.screenLeft}, ${window.screenTop})),
0);

@xTHExBIGxDEALx
Copy link

alert(Window position: (${window.screenLeft}, ${window.screenTop}));
setTimeout(
()=>alert(Window position: (${window.screenLeft}, ${window.screenTop})),
0);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants