// Copyright (c) 2024 Vuplex Inc. All rights reserved. // // Licensed under the Vuplex Commercial Software Library License, you may // not use this file except in compliance with the License. You may obtain // a copy of the License at // // https://vuplex.com/commercial-library-license // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using System; namespace Vuplex.WebView { /// /// An interface implemented by a webview if it supports opening popups. /// For detailed examples, please see 3D WebView's PopupDemo and CanvasPopupDemo /// scenes. /// /// /// There are several approaches that a web page can use to open a URL in a popup. /// For example, it can load a new URL using the window.open() JavaScript API or /// use the target="_blank" attribute on a link. In a normal web browser, these /// approaches cause the browser to open the new URL in a new tab or window. In /// 3D WebView, the default behavior is to load the new URL in the existing webview /// without creating a new webview. However, an application can change this by /// using the IWithPopups interface to make popup URLs open in a new popup webview. /// /// /// /// await webViewPrefab.WaitUntilInitialized; /// var webViewWithPopups = webViewPrefab.WebView as IWithPopups; /// if (webViewWithPopups != null) { /// webViewWithPopups.SetPopupMode(PopupMode.LoadInNewWebView); /// /// webViewWithPopups.PopupRequested += async (sender, eventArgs) => { /// Debug.Log("Popup opened with URL: " + eventArgs.Url); /// // Create and display a new WebViewPrefab for the popup. /// var popupPrefab = WebViewPrefab.Instantiate(eventArgs.WebView); /// popupPrefab.transform.parent = transform; /// popupPrefab.transform.localPosition = Vector3.zero; /// popupPrefab.transform.localEulerAngles = new Vector3(0, 180, 0); /// await popupPrefab.WaitUntilInitialized(); /// popupPrefab.WebView.CloseRequested += (popupWebView, closeEventArgs) => { /// Debug.Log("Closing the popup"); /// popupPrefab.Destroy(); /// }; /// }; /// } /// /// public interface IWithPopups { /// /// Sets how the webview handles popups. /// void SetPopupMode(PopupMode popupMode); /// /// Indicates that the webview requested a popup. /// event EventHandler PopupRequested; } }