如何在Unity WebKit中返回上一页

时间:2019-01-07 03:52:26

标签: c# unity3d

我统一编写了一个报纸应用程序,并且正在使用webKit来显示报纸。但是,当按下电话按钮时,我需要返回上一页。有人知道C#代码可以返回上一页...

我写了;

if(Input.GetKeyButton(KeyCode.Escape)){

    Applicaition.Quit(); // However it quits from the app. Not going back previous page...

}

谢谢

2 个答案:

答案 0 :(得分:1)

欢迎使用堆栈溢出。据我所知,Unity不支持任何官方WebKit。因此,如果您提供更多代码细节,将很有帮助。

对于您的问题,我想您可以自己保留一个URL堆栈来处理页面控件。

Stack<string> openedPages = new Stack<string>();

// When user open another page, put current url into stack.
OnOpenPage()
{
    openedPages.Push(_current_page_url);
}

// When user push the previous page button, pop the last opened page url
OnPreviousPageButton()
{
    string lastUrl = openedPages.Pop();
    _yourBrowser.Open(lastUrl);
}

答案 1 :(得分:-1)

using System.Collections;
using UnityEngine;
using System;
using System.Collections.Generic;


public class SampleWebView : MonoBehaviour
{

    public string Url;
    public GUIText status;
    WebViewObject webViewObject;


    IEnumerator Start()
    {
        webViewObject = (new GameObject("WebViewObject")).AddComponent<WebViewObject>();
        webViewObject.Init(
            cb: (msg) =>
            {
                Debug.Log(string.Format("CallFromJS[{0}]", msg));
                status.text = msg;
                status.GetComponent<Animation>().Play();
            },
            err: (msg) =>
            {
                Debug.Log(string.Format("CallOnError[{0}]", msg));
                status.text = msg;
                status.GetComponent<Animation>().Play();
            },
            started: (msg) =>
            {
                Debug.Log(string.Format("CallOnStarted[{0}]", msg));
            },
            ld: (msg) =>
            {
                Debug.Log(string.Format("CallOnLoaded[{0}]", msg));
#if UNITY_EDITOR_OSX || !UNITY_ANDROID
                // NOTE: depending on the situation, you might prefer
                // the 'iframe' approach.
                // cf. https://github.com/gree/unity-webview/issues/189
#if true
                webViewObject.EvaluateJS(@"
                  if (window && window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.unityControl) {
                    window.Unity = {
                      call: function(msg) {
                        window.webkit.messageHandlers.unityControl.postMessage(msg);
                      }
                    }
                  } else {
                    window.Unity = {
                      call: function(msg) {
                        window.location = 'unity:' + msg;
                      }
                    }
                  }
                ");
#else
                webViewObject.EvaluateJS(@"
                  if (window && window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.unityControl) {
                    window.Unity = {
                      call: function(msg) {
                        window.webkit.messageHandlers.unityControl.postMessage(msg);
                      }
                    }
                  } else {
                    window.Unity = {
                      call: function(msg) {
                        var iframe = document.createElement('IFRAME');
                        iframe.setAttribute('src', 'unity:' + msg);
                        document.documentElement.appendChild(iframe);
                        iframe.parentNode.removeChild(iframe);
                        iframe = null;
                      }
                    }
                  }
                ");
#endif
#endif
                webViewObject.EvaluateJS(@"Unity.call('ua=' + navigator.userAgent)");
            },
            //ua: "custom user agent string",
            enableWKWebView: true);
#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
        webViewObject.bitmapRefreshCycle = 1;
#endif
        webViewObject.SetMargins(10, 140, 10, Screen.height / 360);
        webViewObject.SetVisibility(true);

#if !UNITY_WEBPLAYER
        if (Url.StartsWith("http")) {
            webViewObject.LoadURL(Url.Replace(" ", "%20"));
        } else {
            var exts = new string[]{
                ".jpg",
                ".js",
                ".html"  // should be last
            };
            foreach (var ext in exts) {
                var url = Url.Replace(".html", ext);
                var src = System.IO.Path.Combine(Application.streamingAssetsPath, url);
                var dst = System.IO.Path.Combine(Application.persistentDataPath, url);
                byte[] result = null;
                if (src.Contains("://")) {  // for Android
                    var www = new WWW(src);
                    yield return www;
                    result = www.bytes;
                } else {
                    result = System.IO.File.ReadAllBytes(src);
                }
                System.IO.File.WriteAllBytes(dst, result);
                if (ext == ".html") {
                    webViewObject.LoadURL("file://" + dst.Replace(" ", "%20"));
                    break;
                }
            }
        }
#else
        if (Url.StartsWith("http")) {
            webViewObject.LoadURL(Url.Replace(" ", "%20"));
        } else {
            webViewObject.LoadURL("StreamingAssets/" + Url.Replace(" ", "%20"));
        }
        webViewObject.EvaluateJS(
            "parent.$(function() {" +
            "   window.Unity = {" +
            "       call:function(msg) {" +
            "           parent.unityWebView.sendMessage('WebViewObject', msg)" +
            "       }" +
            "   };" +
            "});");
#endif
        yield break;
    }

#if !UNITY_WEBPLAYER
    //void OnGUI()
    //{
    //    GUI.enabled = webViewObject.CanGoBack();
    //    if (GUI.Button(new Rect(10, 10, 80, 80), "<")) {
    //        webViewObject.GoBack();
    //    }
    //    GUI.enabled = true;

    //    GUI.enabled = webViewObject.CanGoForward();
    //    if (GUI.Button(new Rect(100, 10, 80, 80), ">")) {
    //        webViewObject.GoForward();
    //    }
    //    GUI.enabled = true;

    //    GUI.TextField(new Rect(200, 10, 300, 80), "" + webViewObject.Progress());
    //}
#endif







}

这是我正在使用的webkit脚本...因此,当我按下电话按钮以返回报纸的上一页时,我需要代码。