MicrosoftEdge / MicrosoftEdge/WebView2Feedback
Hololens2 virtual keyboard not opening after javascript "beforeunload" event
Open
@champnic is already working on this.
Since Jul 20, 2023.
bug
tracked
- Dominant language
- PowerShell
- Stars
- 526
- Forks
- 67
- PR merge metrics
- No merged PRs in 30d
Description
Description
Hololens2 virtual keyboard not opening after javascript "beforeunload" event.
Version
SDK: com.microsoft.mixedreality.webview.unity-0.17.1-pre.3.tgz
Runtime: Unity2020.3.33
Framework: Unity2020.3.33, MRTK2.8.3
OS: (Hololens2) 22621.1120.arm64fre.ni_release_svc_sydney_rel_prod.230707-1012
Regression
Was this working before but has regressed? > No.
If yes, what version did this last work on?
Repro Steps
- Clone this repository.
https://github.com/MicrosoftEdge/WebView2Samples/ - Resolve compilation errors
- Do "Restore Features" in Mixed Reality Feature Tool.
- remove this line from package.json
"com.unity.collab-proxy": "2.0.3",
- Open this sample in UnityEditor.
https://github.com/MicrosoftEdge/WebView2Samples/tree/main/GettingStartedGuides/HoloLens2_GettingStarted/HoloLens2GetStartedApp - Set "Current URL" of "WebView"
https://ydev0927.github.io/ForWebView2Issues/beforeunload_page.html
<!-- beforeunload_page.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page</title>
<script type="text/javascript">
window.addEventListener('beforeunload', (event) => {
event.preventDefault();
event.returnValue = '';
});
</script>
</head>
<body>
<input type="text" />
<br><br>
<input type="button" onclick="alert('test')" value="alert" />
<br><br>
<a href="./beforeunload_page.html">reload</a>
</body>
</html>
- Attach this script to "Canvas"
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.WebView;
using UnityEngine;
public class WebViewInputProvider : MonoBehaviour, IMixedRealityPointerHandler
{
WebView webViewComponent => GetComponentInChildren<WebView>();
private IWebView webView;
private void Start()
{
webViewComponent.GetWebViewWhenReady((IWebView webView) =>
{
this.webView = webView;
});
}
private void SendMouseButton(Vector2 webViewPoint, WebViewMouseEventData.EventType eventType)
{
IWithMouseEvents mouseEventsWebView = webView as IWithMouseEvents;
if (mouseEventsWebView == null)
return;
WebViewMouseEventData mouseEvent = new WebViewMouseEventData
{
X = (int)webViewPoint.x,
Y = (int)webViewPoint.y,
Type = eventType,
Button = WebViewMouseEventData.MouseButton.ButtonLeft,
TertiaryAxisDeviceType = WebViewMouseEventData.TertiaryAxisDevice.PointingDevice
};
// Propagate the event to the WebView plugin.
mouseEventsWebView.MouseEvent(mouseEvent);
}
private Vector2 ConvertToWebViewSpace(Vector3 worldPos)
{
var localPos = webViewComponent.transform.InverseTransformPoint(worldPos);
var localXYperBase = new Vector2(localPos.x, localPos.y);
var localXYper = (localXYperBase * new Vector2(1, -1)) + new Vector2(0.5f, 0.5f);
var localXY = new Vector2(webView.Width, webView.Height) * localXYper;
return localXY;
}
public void OnPointerDown(MixedRealityPointerEventData eventData) => OnPointerDown(eventData.Pointer.Result.Details.Point);
private void OnPointerDown(Vector3 point)
{
var webViewSpacePoint = ConvertToWebViewSpace(point);
SendMouseButton(webViewSpacePoint, WebViewMouseEventData.EventType.MouseDown);
}
public void OnPointerDragged(MixedRealityPointerEventData eventData) => OnPointerDragged(eventData.Pointer.Result.Details.Point);
private void OnPointerDragged(Vector3 point)
{
var webViewSpacePoint = ConvertToWebViewSpace(point);
SendMouseButton(webViewSpacePoint, WebViewMouseEventData.EventType.MouseMove);
}
public void OnPointerUp(MixedRealityPointerEventData eventData) => OnPointerUp(eventData.Pointer.Result.Details.Point);
private void OnPointerUp(Vector3 point)
{
var webViewSpacePoint = ConvertToWebViewSpace(point);
SendMouseButton(webViewSpacePoint, WebViewMouseEventData.EventType.MouseUp);
}
public void OnPointerClicked(MixedRealityPointerEventData eventData)
{
}
}
- Run on Hololens.
Tapping opens a virtual keyboard.
But when I tap after tapping "reload", the virtual keyboard doesn't open.
Screenshots
Additional context
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.